2016-09-30 28 views
2

私は2つの連想配列の比較を研究していますが、これは公平な精度でしかできませんでした。私はS.O.のすべての同様のスレッドを読みました。 2つの連想配列を比較しながら、テストデータが適切な一致を正しく表示しますが、一致した値の数をカウントしようとすると、私はいくつかの奇妙な結果を得ています。2つの連想配列の一致した値の比較とカウント - PHP

EDIT:

<?php 
$data = array(
    'Alpha' => array(
     'peace' => 0, 
     'art' => 1, 
     'trend' => 0, 
     'night' => 1, 
     'shop' => 0 
    ), 
    'Beta' => array(
     'peace' => 1, 
     'art' => 1, 
     'trend' => 1, 
     'night' => 1, 
     'shop' => 0 
    ), 
    'Gamma' => array(
     'peace' => 0, 
     'art' => 1, 
     'trend' => 1, 
     'night' => 1, 
     'shop' => 0 
    ) 
); 
$choices = array(
    'peace' => 0, 
    'art' => 1, 
    'trend' => 0, 
    'night' => 1, 
    'shop' => 0 
); 
function compare($data, $choices) 
{ 
    foreach ($data as $city => $name) 
    { 
     echo $city . '<br>'; 
     foreach ($name as $key => $value) 
     { 
      ($choices[$key] === $value) ? $match = 'match' : $match = 'no'; 
      ($choices[$key] === $value) ? $i++ : $i = 0; 
      echo $key . ':' . $value . ':' . $choices[$key] . ':' . $match . '<br>'; 
     } 
     echo 'Matches:' . $i . '<br><br>'; 
    } 
} 
compare($data, $choices); 
?> 

データを出力

Format of data is as follows 
----------------------------- 
name of key:$data value:$choices value:is match 

Alpha 
peace:0:0:match 
art:1:1:match 
trend:0:0:match 
night:1:1:match 
shop:0:0:match 
Matches:5 

Beta 
peace:1:0:no 
art:1:1:match 
trend:1:0:no 
night:1:1:match 
shop:0:0:match 
Matches:2 

Gamma 
peace:0:0:match 
art:1:1:match 
trend:1:0:no 
night:1:1:match 
shop:0:0:match 
Matches:2 

'アルファ' はそれがないている、5試合を返す必要があります。 'ガンマ'は4を返し、2を返します。

ご協力いただければ幸いです。前もって感謝します。

答えて

1

問題は、3進文でカウントを増やす方法です。あなたは

​​

を行うとそれは$iそれが不一致を検出した任意の時間ゼロにリセットされます。

単純な条件を使用すると、正しいカウントが得られるはずです。

if ($choices[$key] === $value) $i++; 

あなたは、内側foreachループの前に0から$iを初期化することができます。

+0

うわー、私はそのような違いがあるかどうかはわかりませんでした。ありがとう、それは働いた! –

+0

ようこそ。 –

関連する問題