2017-08-14 14 views
0

同じメンバ数の配列が2つあります(常に)$userInputArr=array("z","z","E","z","z","E","E","E","E","E");$user2InputArr=array("a","a","a","z","a","E","E","E","a","E"); 2つの配列で一致するメンバーを見つける方法を知っています。ここでは、類似のインデックスを持つ一致する要素を探したいとします。 $ userInputArr [4] == $ user2InputArr [4]なら、$ matchesをインクリメントします。下の私の試みでは、私は両方の配列をループしますが、増分する$一致を得ることはできません。あなたは、このようにすればいい2つの配列要素を比較すると、互いに類似のインデックスになります

$match = 0; 
for ($c =0; $c < count($$userInputArr); $c++) { 
    for ($d = $c; $d<count($user2InputArr);$d++) { 
     if ($userAnsStrArr[$c] == $userInputArr[$d]) { 
      $match = $match +1; 
     } 
    } 
} 
+0

「foreach」は適していませんか? – Script47

+0

@ Script47私はforeachループも試してみましたが、成功しませんでした。 – jimiss

+0

ここに2つのループを入れ子にするのはナンセンスです。 _one_の配列をループし、その間に対応する要素にアクセスしたいとします。 – CBroe

答えて

1

のために働く:

$array1 = array("z","z","E","z","z","E","E","E","E","E"); 
$array2 = array("a","a","a","z","a","E","E","E","a","E"); 

// Find the matching pairs (key, value) in the two arrays 
$common = array_intersect_assoc($array1, $array2); 
// Print them for verification 
print_r($common); 

// Count them 
$match = count($common); 
echo($match." common items.\n"); 

出力は次のとおりです。ここで

Array 
(
    [3] => z 
    [5] => E 
    [6] => E 
    [7] => E 
    [9] => E 
) 
5 common items. 
+0

肥大化したページでスマートな回答を見逃してしまう。情報のないPHP開発者はこれ以外の何もしません! – mickmackusa

0
$match = 0; 
for ($c =0; $c < count($$userInputArr); $c++) { 

    if ($userAnsStrArr[$c] == $userInputArr[$c]) { 
      $match = $match +1; 
     } 

} 

+0

'count($$ userInputArr)'にタイプミスがあり、動作しないようになっています。また、2番目の配列が最初の配列よりも短いときに通知をトリガーするのを避けるため、2つの配列の長さが短くなるまで繰り返します。 – axiac

0

これは、この質問は、PHP機能array_intersect_assoc()ための完璧な例です私

$i = sizeof($userInputArr); 

$match = 0; 
for($j = 0; $j < $i; $j++) 
    if ($userInputArr[$j] == $user2InputArr[$j]) { 
     $match = $match +1; 
    } 
+1

'sizeof'は何か他のものと混同する可能性がありますので、' count'を使うことをお勧めします。 – Script47

+0

2番目の配列が最初の配列よりも短いときに通知をトリガーするのを避けるために、 '$ i'を2つの配列のより小さい長さに設定します。この場合、 – axiac

+0

"同じ数のメンバーを持つ配列が2つあります(常に)")。私はそれを簡単にしました。私はstackoverflowの新しいです。 –

0

はのためのコードです君は。 foreachを1つ使用し、最初にarrayを通過し、key-valueが2番目のarrayであることを確認してください。

$s = array("z","z","E","z","z","E","E","E","E","E"); 
$b = array("a","a","a","z","a","E","E","E","a","E"); 

foreach($s as $k => $v) { 
    if($b[$k] === $s[$k]) { 
     echo $k . ' is the index where keys and values exactly match with value as ' . $b[$k]; 
    } 
} 

と出力:

3 is the index where keys and values exactly match with value as z 
5 is the index where keys and values exactly match with value as E 
6 is the index where keys and values exactly match with value as E 
7 is the index where keys and values exactly match with value as E 
9 is the index where keys and values exactly match with value as E 

そして、ここではリンクです:https://3v4l.org/eX0r4

0

私はあなたのコードは、単一のループでループ増加の試合のための2つを必要としないようでは、コードの下に表示されます。

<?php 
$userInputArr=array("z","z","E","z","z","E","E","E","E","E"); 
$user2InputArr=array("a","a","a","z","a","E","E","E","a","E"); 
$match = 0; 
for ($c =0; $c < count($userInputArr); $c++) { 
    if ($user2InputArr[$c] == $userInputArr[$c]) { 
     $match = $match + 1; 
    } 
} 
echo $match; 
?> 
関連する問題