In_array不工作 - 比较两个文件

时间:2017-02-01 17:26:38

标签: php

下面的代码是我想要做的简单版本。代码将读入两个文件,查看是否有匹配的条目,如果有,则显示该项目的数字差异。但它没有用。第一个echo显示该单词,但从未到达第二个echo。有人请解释我缺少的东西吗?

    $mainArry = array('Albert,8');
    $arry =     array('Albert,12');

    foreach ($arry as $line) {
        $kword = explode(',', $line); 
        echo 'kword '.$kword[0];
        if (in_array($kword[0], $mainArry)) {
            echo 'line '.$line. ' has count of '.$kword[1] . '<br>';
        }
    } 

3 个答案:

答案 0 :(得分:2)

$ mainArry包含一个元素:字符串'Albert,8'。看起来您希望将其用作数组(元素'Albert''8')而不是字符串。

您提到代码将从两个文件中读取,因此您可以将其“爆炸”为真实数组,就像使用$ arry一样。一种更简单的方法是使用str_getcsv()将CSV字符串解析为$ mainArry。

$inputString = 'Albert,8';
$mainArry = str_getcsv($inputString); // now $mainArry is ['Albert','8']
$arry =     array('Albert,12');

foreach ($arry as $line) {
    $kword = explode(',', $line); 
    echo 'kword '.$kword[0];
    if (in_array($kword[0], $mainArry)) {
        echo 'line '.$line. ' has count of '.$kword[1] . '<br>';
    }
} 

测试here

答案 1 :(得分:0)

您正在尝试将字符串AlbertAlbert,8进行比较,因此它们不匹配。如果要检查字符串是否包含关键字,假设您的数组包含多个元素,则可以使用:

$mainArry = array('Albert,8');
$arry =     array('Albert,12');

foreach ($arry as $line) {
    $kword = explode(',', $line); 
    echo 'kword '.$kword[0];
    foreach ($mainArry as $comp) {
        if (strstr($comp, $kword[0])) {
            echo 'line '.$line. ' has count of '.$kword[1] . '<br>';
        }
    }
}

示例:https://eval.in/728566

答案 2 :(得分:0)

我不推荐您的工作方式,但这是一个解决方案,基本上您应用于$arry的流程也应该适用于您{I}尝试的$mainArry比较它。

 $mainArry = array('Albert,8');
    $arry =     array('Albert,12');

/***
NEW function below takes the valus out of the main array.
    and sets them in their own array so they can be properly compared. 
***/
 foreach ($mainArry as $arrr){
 $ma = explode(",",$arrr);
 $names[] = $ma[0];
 $values[] = $ma[1];
 }
 unset($arrr,$ma);


    foreach ($arry as $line) {
        $kword = explode(',', $line); 
        echo 'kword '.$kword[0];
        /// note var reference here is updated. 
        if (in_array($kword[0], $names)) {
            echo '<br>line '.$kword[0]. ' has count of '.$kword[1] . '<br>';
        }
    }
  

是的,MarcM's answer above在整齐的单行中做同样的事情,但我想在值设置的引擎操作下再说明一点。 :-/