2016-09-30 93 views
2

我一直在研究比較兩個關聯陣列,我只能用相當的準確度做到這一點。我已閱讀S.O.上所有類似的線索。但沒有解決或解決我遇到的問題,即在比較兩個關聯數組時,測試數據將成功顯示適當的匹配,但是當我嘗試計算匹配值的數量時,我得到了一些奇怪的結果。比較和計數兩個關聯陣列的匹配值 - PHP

編輯:

<?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場比賽,其中它。 'Beta'應該返回3,它返回2. 'Gamma'應該返回4,它返回2.

任何幫助將不勝感激。先謝謝你。

回答

1

問題是你如何用三元語句遞增計數。當你做

​​

它將重置$i遇到不匹配的任何時間。

使用一個簡單的條件,應該給你正確的計數。

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

您可以將內部foreach循環之前初始化$i0

+0

哇,我不知道這會有什麼不同。謝謝,它工作! –

+0

不客氣。 –