2016-08-30 5 views
1

PHP documentation 명확하게PHP array_diff 버그?

하나 개 이상의 다른 배열에 대한 배열 1을 비교 미국과 다른 배열의에 존재하지 않는 배열 1의 을 반환합니다.

이 경우는 그렇지 않습니다. 다음의 예, 즉 하나의 경우 일반 배열 및 다른 연관 배열

b FROM a = [1,2] 
a FROM b = {"2":5} 

를 반환

$a = array(1,2,3,4); 
$b = array(3,4,5); 
echo "b FROM a = "; 
echo json_encode(array_diff($a,$b)); 
echo "<br>a FROM b = "; 
echo json_encode(array_diff($b,$a)); 

보십시오. 쉽게 고정 - 단지 값을 걱정하므로 array_values(array_diff을 간단히 처리 할 수 ​​있습니다. 그러나,이 차이점에 대해 문서가 빛을 발합니다. 아마도 여기에있는 누군가가 무슨 일이 일어나고 있는지 더 많은 것을 밝힐 수 있을까요?

+1

팁을 증가 키를 다시

echo json_encode(array_values(array_diff($b,$a))); 

를 사용

0, 그래서 그들은 JSON에 저장됩니다 사용'print_r'/PHP 디버깅을위한'var_dump' 고백한다. 믹스에 전체 기술을 도입하면 복잡해집니다. – deceze

+0

좋은 점 - json_encode는 출력이 좀 더 단순하기 때문에 종종 사용합니다. – DroidOS

답변

3

그것은 그것은 JSON

array_diff() 키를 유지/연관성

b from a 반환

array(
    0 => 1 
    1 => 2 
) 

a from b 반환의 마법 아무것도하고있어 PHP 아니다

array(
    2 => 5 
) 

당신 변환 json에게, json doesn 0에서 숫자가 1 씩 증가하는 경우 b from a의 키가 해당 조건과 일치하므로 json에서 무시됩니다.

그러나 a from b 결과의 키는 자연스럽게 증가하지 않습니다 당신이 키 연관성을 유지하지 않으려면, 자연스럽게

+0

니스 ... 그러나 나는 문서에서 어디에서 명시 적으로 _array_diff() matains keys/associativity_를 언급했는지 본다. 나는 그런 종류의 것을 본다. – DroidOS

+0

'array1의 모든 __entries__를 포함하는 배열을 반환합니다. 다른 배열에는 존재하지 않습니다. '는 일반적으로 키와 값을 모두 의미하는'entries '라는 용어를 사용합니다. 이 예는 또한 키가 유지되고 있음을 나타냅니다 (' ( [1] => 푸른 색 )') –