下面的代码是我想要做的简单版本。代码将读入两个文件,查看是否有匹配的条目,如果有,则显示该项目的数字差异。但它没有用。第一个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>';
}
}
答案 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)
您正在尝试将字符串Albert
与Albert,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>';
}
}
}
答案 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在整齐的单行中做同样的事情,但我想在值设置的引擎操作下再说明一点。
:-/