可有人請向我解釋什麼這兩個函數的區別是:區別:array_diff_ukey和array_diff_uassoc
array_diff_ukey
array_diff_uassoc
他們都需要鑰匙進入比較功能,以及基於這些鍵決定是否數組元素應該退還或不。我檢查的PHP手冊,但對我來說,他們似乎都在做同樣的事情...
可有人請向我解釋什麼這兩個函數的區別是:區別:array_diff_ukey和array_diff_uassoc
array_diff_ukey
array_diff_uassoc
他們都需要鑰匙進入比較功能,以及基於這些鍵決定是否數組元素應該退還或不。我檢查的PHP手冊,但對我來說,他們似乎都在做同樣的事情...
array_diff_ukey
返回所述第一陣列,其鍵比較所述第二陣列中的所有密鑰(的語義不同的那些元件該比較是用戶定義的)。與這些鍵相關的值不起作用。
array_diff_uassoc
在於還檢查值以上的一個「更包含性的」版本:如果所述第一陣列中的一個關鍵比較等於按鍵上的第二陣列中但這些值是不同的,該元件也包括在結果。在這種情況下,值的比較不是用戶定義的,但是與array_diff
一樣:對於要比較的兩個值相等,它們的字符串表示形式必須相同。
實施例,改編自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
之間的區別是後者檢查鍵和值,而第一個只檢查鍵。
在diff_
之後添加u
意味着您必須提供自定義回調函數,而不是默認的內置函數。基於手動上
實施例(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)
}
那麼,根據手冊'array_diff_uassoc' *「計算* ***附加索引檢查*** *」的數組的差異,其中'array_diff_ukey'沒有。 – Kermit 2013-05-07 17:46:27
似乎是一個文檔問題,因爲'uassoc'的回調是比較* values *而不是* keys *。 – 2013-05-07 18:00:31