PHP Conference Japan 2024

array_diff_uassoc

(PHP 5, PHP 7, PHP 8)

array_diff_uassoc使用使用者提供的回呼函式執行額外的索引檢查,計算陣列的差異

說明

array_diff_uassoc(陣列 $array, 陣列 ...$arrays, 可呼叫 $key_compare_func): 陣列

比較 arrayarrays 並返回差異。與 array_diff() 不同,陣列鍵值會用於比較。

array_diff_assoc() 不同,此函式使用使用者提供的回呼函式來比較索引,而非內建函式。

參數

array

要比較的基準陣列

arrays

要與基準陣列比較的其他陣列

key_compare_func

比較函式必須回傳一個整數。若第一個參數小於、等於或大於第二個參數,則分別回傳小於零、等於零或大於零的整數。

callback(mixed $a, mixed $b): int
注意事項

從比較函式回傳*非整數*值,例如 float,將導致回呼函式的回傳值被內部強制轉換為 int。因此,諸如 0.990.1 等值都會被強制轉換為整數值 0,這將導致這些值被視為相等。

回傳值

回傳一個 陣列,其中包含 array 中所有在其他任何陣列中不存在的項目。

範例

範例 #1 array_diff_uassoc() 範例

在此範例中,鍵值對 "a" => "green" 出現在兩個陣列中,因此它不在函式的輸出中。相對地,鍵值對 0 => "red" 存在於輸出中,因為在第一個陣列中,"red" 的鍵值會自動指定為 0,而在第二個陣列中,由於鍵值 0 已被 yellow 佔用,因此 "red" 的鍵值被指定為 1

<?php
function key_compare_func($a, $b)
{
return
$a <=> $b;
}

$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "green", "yellow", "red");
$result = array_diff_uassoc($array1, $array2, "key_compare_func");
print_r($result);
?>

上述範例會輸出:

Array
(
    [b] => brown
    [c] => blue
    [0] => red
)

兩個索引的相等性是由使用者提供的回呼函式檢查。

注意事項

注意:

此函式僅檢查 n 維陣列的一個維度。可以透過使用例如 array_diff_uassoc($array1[0], $array2[0], "key_compare_func"); 來檢查更深層的維度。

參見

新增註解

使用者貢獻的註解 1 則註解

MD. ABU SAYEM
10 年前
//適用於多維陣列的 array_diff_uassoc
$color_1=array('a'=>'white','b'=>'red','c'=>array('a'=>'green','b'=>'blue','c'=>'yellow'));
$color_2=array('a'=>'white','b'=>'red','c'=>array('a'=>'white','b'=>'red','c'=>'yellow'));

function key_compare($a,$b){
if($a===$b) return 0;
return($a>$b)?1:-1;
}
print_r(array_diff_uassoc($color_1['c'], $color_2['c'],"key_compare"));

//輸出
陣列
(
[a] => green
[b] => blue
)
To Top