0

誰かが私にこれら2つの機能の違いを説明してもらえますか:

array_diff_ukey
array_diff_uassoc

どちらも比較関数にキーを取り、それらのキーに基づいて、配列要素を返すかどうかを決定します。PHPのマニュアルを確認しましたが、どちらも同じことをしているようです...

4

2 に答える 2

2

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

于 2013-05-07T18:01:56.523 に答える
1

マニュアルから:

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は、後者はキーと値の両方をチェックするのに対し、前者はキーのみをチェックすることです。

uafterの追加は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)
}
于 2013-05-07T17:55:12.683 に答える