2017-02-01 40 views
0

下面的代码是我正在尝试做的简单版本。代码将在两个文件中读取,看看是否有匹配的条目,如果有的话,显示该项目的数字差异。但它不起作用。第一个回显显示该单词,但第二个回显永远不会到达。会有人请解释我失踪了吗?In_array不工作 - 比较两个文件

$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>'; 
     } 
    } 
+0

您的第一个数组只包含1个元素“Albert,8”。这是打算或你是否想要有2个项目存储为'[“Albert”,8]'? – Artemis

+1

看起来你正在为'Albert'的kword搜索$ mainArray,但是$ mainArray只有'Albert,8',所以它不会匹配。 – MCMXCII

+0

在stackoverflow上的答案的好处之一是,他们可以帮助其他用户提出类似的问题。既然你的问题真的很有意思,在这方面它实现得很少。对于你想要达到的目标以及为什么你选择以特定方式来做这件事,你会更好地看待它。这不仅有助于提高答案的质量,而且可以提高您的问题更好地服务社区的可能性。请始终将其他提问者的问题写下来。 – Jonathan

回答

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

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

0

我不推荐你的工作方式,但这是一个解决方案,基本上你应用于$arry的过程也应该适用于你想要比较的$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做同样的事情在一个整洁的单行线,但我想说明下的值设置的引擎盖操作多一点。 :-/