2017-02-01 8 views
0

以下のコードは、私がやろうとしているものの単純なバージョンです。コードは2つのファイルを読み込み、一致するエントリがあるかどうかを確認し、一致するエントリがある場合は、その項目の数値に差異を表示します。しかし、それは動作していません。最初のエコーは単語を表示しますが、2番目のエコーは決して到達しません。誰かが私が逃していることを説明してくれますか?In_arrayが動作しない - 2つのファイルを比較する

$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

$ mainArrayに 'Albert'のkwordを検索しているようですが、$ mainArrayには 'Albert、8'しかないので一致しません。 – MCMXCII

+0

Stackoverflowでの回答の利点の1つは、同様の質問をした他のユーザーを助けることができることです。あなたの質問は本当にかなり工夫されているので、これに関してはほとんど達成できません。あなたが達成しようとしていることと、それを特定のやり方で選んだ理由についてより多くの視点を置く方が良いでしょう。これにより、回答の質が向上するだけでなく、あなたの質問がコミュニティに役立つ可能性が高まります。常に他の質問者と一緒にあなたの質問を覚えておいてください。 – Jonathan

答えて

2

あなたの$ mainArryは、単一の要素が含まれます。文字列を'Albert,8' 。文字列の代わりに配列(要素'Albert''8')として使用するようです。

コードは2つのファイルから読み込むので、$ 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

あなたはAlbert,8で文字列Albertを比較しようとしているので、彼らは一致しません。あなたは文字列にキーワードが含まれているかどうかを確認したい場合は、お使いのアレイに複数の要素を持っている、あなたが使用したと仮定すると:

$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は、きちんとした、単一の行に同じことを行いますが、私は、値設定のフードの操作の下でもう少し説明したかったです。 :-/

関連する問題