2016-08-30 17 views
1

PHP documentationは明らかPHPのarray_diffバグ?

は、1つ以上の他のアレイに対する配列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'注意書き。その混合物に全体的な技術(JSON)を導入するだけで、物事は複雑になります。 – 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つ増やしているので、キーがからjsonで無視されて、その条件に一致するので、

結果のキーは自然にインクリメントされませんあなたがキー結合性を維持したくない場合は、のように自然に

+0

いいえ...しかし、私は、ドキュメント内で、_array_diff()のmatains keys/associativity_を明示的に言及しているのを見ているのだろうかと思います。私はそのようなものは何も見ない。 – DroidOS

+0

'array1の__entries__をすべて含む配列を返します。これは他の配列には存在しません。'は、通常はキーと値の両方を意味する 'entries'という用語を使います。キーが保持されていることも示しています( '配列 ( [1] =>青色 )') –