誰かが私にこれら2つの機能の違いを説明してもらえますか:
array_diff_ukey
array_diff_uassoc
どちらも比較関数にキーを取り、それらのキーに基づいて、配列要素を返すかどうかを決定します。PHPのマニュアルを確認しましたが、どちらも同じことをしているようです...
array_diff_ukey
キーが 2 番目の配列内のすべてのキーと異なると比較される最初の配列の要素を返します (比較のセマンティクスはユーザー定義です)。これらのキーに関連付けられた値は関係ありません。
array_diff_uassoc
値もチェックする上記の「より包括的な」バージョンです。最初の配列のキーが2番目の配列のキーと等しいが、値が異なる場合、その要素も結果に含まれます。この場合、値の比較はユーザー定義ではありませんが、次のように機能しarray_diff
ます。2 つの値が等しいと比較するには、それらの文字列表現が同一である必要があります。
例、PHP ドキュメントから適応:
function key_compare_func($key1, $key2)
{
if ($key1 == $key2)
return 0;
else if ($key1 > $key2)
return 1;
else
return -1;
}
$array1 = array('blue' => 1, 'red' => 2, 'green' => "3", 'purple' => 4);
$array2 = array('green' => 3, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
var_dump(array_diff_ukey($array1, $array2, 'key_compare_func'));
var_dump(array_diff_uassoc($array1, $array2, 'key_compare_func'));
ここで、array_diff_ukey
は から「赤」と「紫」の要素を返します。$array1
これは、これらのキーが のどのキーとも等しくないため$array2
です。ただしarray_diff_uassoc
、そのキーが両方の配列に存在する場合でも、関連付けられている値が異なるため、「青」要素も返します。
$array1
関連する値が の文字列と の整数であるにもかかわらず、「緑」要素はどちらの結果にも含まれないことに注意してください$array2
。
マニュアルから:
array_diff — Computes the difference of arrays
array_diff_key — array_diff_key — Computes the difference of arrays using keys for comparison
array_diff_assoc — Computes the difference of arrays with additional index check
この追加のインデックス チェックは、値が同じでなければならないだけでなく、キーも同じでなければならないことを意味します。array_diff_ukey
したがって、との違いarray_diff_uassoc
は、後者はキーと値の両方をチェックするのに対し、前者はキーのみをチェックすることです。
u
afterの追加はdiff_
、デフォルトの組み込み関数の代わりにカスタム コールバック関数を提供する必要があることを意味します。
マニュアルに基づく例 ( Fiddle )
<?php
header("Content-Type: text/plain");
$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'black' => 0, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8, 'black' => 0);
var_dump(array_diff($array1, $array2));
var_dump(array_diff_key($array1, $array2));
var_dump(array_diff_assoc($array1, $array2));
?>
出力
array(4) {
["blue"]=>
int(1)
["red"]=>
int(2)
["green"]=>
int(3)
["purple"]=>
int(4)
}
array(2) {
["red"]=>
int(2)
["purple"]=>
int(4)
}
array(4) {
["blue"]=>
int(1)
["red"]=>
int(2)
["green"]=>
int(3)
["purple"]=>
int(4)
}