search

Home  >  Q&A  >  body text

php中遍历数组查找数组元素是否存在与当前字符串,如果不存在就输出当前字符串,如果存在,则输出数组的键值

<?php
$lang_Log=array(
    'rep-cache during mirror is cleard'=>'规则缓冲清除',
    'Starting replication'=>'开始规则',
    'Wait -> Brk'=>'镜像状态改变,由等待到停止状态',
    'OK -> Wait'=>'镜像状态改变,由OK到等待状态',

);


$logs = sd_get_log_sys_by_uuid(uuid);

for($i=0; $i<$count(logs); $i++) {
    if($lang_Log[$logs[$i]]){
        echo $lang_Log[$logs[$i]];
    }else{
        $flag = false;
        foreach ($lang_Log as $k=> $v) {
            $pos = strpos($logs[$i], $k);
            if($pos !== false){
                $flag = true;
                echo $v;
                break;
            }
        } 
        if(!$flag){
            echo $logs[$i];//若没有对应的翻译,则直接输出
        }
    }
}

?>

我想做的就是遍历数组查找数组元素是否存在与当前字符串,如果不存在就输出当前字符串,如果存在,则输出数组的键值。
就是翻译功能。

1.判断日志在数组中是否有对应中文(因为日志有的是死的).
2.判断日志部分字符串是否有对应的中文(有的日志是包含了变量的语句,所以需要用部分字符串匹配,然后翻译).
3.因为外层有个logs数组的循环语句,所以用break,不用exit.
4.用flag标识符解决

阿神阿神2835 days ago920

reply all(2)I'll reply

  • PHP中文网

    PHP中文网2017-04-11 10:03:19

    为什么不走else呢?
    你循环每一个词,循环第一个是rep-cache during mirror is cleard
    存在于$s里吗?
    不存在
    走不走else

    运不运行exit;
    运行
    还继不继续执行?
    不继续
    后面的词还检查吗?
    不检查

    foreach ($lang_Log as $k=> $v) {
        $pos = strpos($s, $k);
        if($pos !== false){
            echo $v;
            break;
        }
    } 
    

    reply
    0
  • 高洛峰

    高洛峰2017-04-11 10:03:19

    $s = "mirror return 0, peer 94, bytes recv [En/De] [2005667596/2005667596 = 100]";
    foreach ($lang_Log as $k=> $v) {

    $pos = strpos($s, $k);
    if($pos !== false){
        echo 'value = ' .  $v . "<br/>;
    }else{
        echo 'key = ' .  $k . "<br/>;
    }

    }

    reply
    0
  • Cancelreply