2016-09-30 6 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는 반환합니다. '감마'는 4를 반환하고 2는 2를 반환합니다.

모든 도움을 주시면 감사하겠습니다. 미리 감사드립니다.

답변

1

문제는 3 진수로 카운트를 증가시키는 방법입니다. 당신이

($choices[$key] === $value) ? $i++ : $i = 0; 

을 수행 할 때 그것은 $i가 아닌 경기를 발견 언제든지 0으로 재설정됩니다.

대신 간단한 조건을 사용하면 올바른 계산을 제공해야합니다.

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

당신은 내부 foreach 루프 전에 0-$i을 초기화 할 수 있습니다.

+0

와우, 그런 차이가 있는지 나는 몰랐다. 고마워요. –

+0

반갑습니다. –