並集
array_merge
合併一個或多個數組。一個數組中的值附加在前一個數組的後面,返回作爲結果的數組。
別忘了數字鍵名將會被重新編號!
$array1 = array("color" => "red", 2, 4);
$array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);
$result = array_merge($array1, $array2);
print_r($result);
Array
(
[color] => red
[0] => 2
[1] => 4
)
Array
(
[0] => a
[1] => b
[color] => green
[shape] => trapezoid
[2] => 4
)
Array
(
[color] => green
[0] => 2
[1] => 4
[2] => a
[3] => b
[shape] => trapezoid
[4] => 4
)
如果你想完全保留原有數組並只想新的數組附加到後面,用 + 運算符。如果兩個被合併的數組含有相同的key,則保留第一個,忽略後邊的。
$array1 = array(0 => 'zero_a', 2 => 'two_a', 3 => 'three_a');
$array2 = array(1 => 'one_b', 3 => 'three_b', 4 => 'four_b');
$result = $array1 + $array2;
print_r($result);
Array
(
[0] => zero_a
[2] => two_a
[3] => three_a
[1] => one_b
[4] => four_b
)
差集
array_diff
計算數組的差集
array array_diff ( array $array1 , array $array2 [, array $... ] )
對比返回在 array1 中但是不在 array2 及任何其它參數數組中的值。
返回一個數組,該數組包括了所有在 array1 中但是不在任何其它參數數組中的值。注意鍵名保留不變。
$array1 = array("a" => "green", "red", "blue", "red");
$array2 = array("b" => "green", "yellow", "red");
$result = array_diff($array1, $array2);
print_r($result);
Array
(
[1] => blue
)
array_diff_key
使用鍵名比較計算數組的差集
本函數和 array_diff() 相同只除了比較是根據鍵名而不是值來進行的。
$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
$result = array_diff_key($array1, $array2);
print_r($result);
Array
(
[red] => 2
[purple] => 4
)
array_diff_assoc
帶索引檢查計算數組的差集
注意和 array_diff() 不同的是鍵名也用於比較。
$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "green", "yellow", "red");
$result = array_diff_assoc($array1, $array2);
print_r($array1);
print_r($array2);
print_r($result);
Array
(
[a] => green
[b] => brown
[c] => blue
[0] => red
)
Array
(
[a] => green
[0] => yellow
[1] => red
)
Array
(
[b] => brown
[c] => blue
[0] => red
)
可以看到鍵值對 “a” => “green” 在兩個數組中都有,因此不在本函數的輸出中。鍵值對 0 => “red” 出現在輸出中是因爲第二個參數中的 “red” 的鍵名是 1。
$array1 = array(0, 1, 2);
$array2 = array("00", "01", "2");
$result = array_diff_assoc($array1, $array2);
print_r($result);
Array
(
[0] => 0
[1] => 1
)
鍵值對 key => value 中的兩個值僅在 (string)
array_udiff
用回調函數比較數據來計算數組的差集
array array_udiff ( array $array1 , array $array2 [, array $ ... ], callable $data_compare_func )
array_udiff() 返回一個數組,該數組包括了所有在 array1 中但是不在任何其它參數數組中的值。注意鍵名保持不變。數據的比較是用 data_compare_func 進行的。如果認爲第一個參數小於,等於,或大於第二個參數時必須分別返回一個小於零,等於零,或大於零的整數。這和 array_diff() 不同,後者使用了內部函數來比較數據。
class cr {
private $priv_member;
function cr($val)
{
$this->priv_member = $val;
}
static function comp_func_cr($a, $b)
{
if ($a->priv_member === $b->priv_member) return 0;
return ($a->priv_member > $b->priv_member)? 1:-1;
}
}
$a = array("0.1" => new cr(9), "0.5" => new cr(12), 0 => new cr(23), 1=> new cr(4), 2 => new cr(-15),);
$b = array("0.2" => new cr(9), "0.5" => new cr(22), 0 => new cr(3), 1=> new cr(4), 2 => new cr(-15),);
$result = array_udiff($a, $b, array("cr", "comp_func_cr"));
print_r($result);
Array
(
[0.5] => cr Object
(
[priv_member:cr:private] => 12
)
[0] => cr Object
(
[priv_member:cr:private] => 23
)
)
array_diff_ukey
用回調函數對鍵名比較計算數組的差集
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' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
print_r(array_diff_ukey($array1, $array2, 'key_compare_func'));
Array
(
[red] => 2
[purple] => 4
)
array_diff_uassoc
用用戶提供的回調函數做索引檢查來計算數組的差集
compare KEYS with custom comparison functions and values with default comparison function
array_udiff_assoc
帶索引檢查計算數組的差集,用回調函數比較數據
compare VALUES with custom comparison function and keys with default comparison function
function compare_func($a, $b) {
if(abs($a) == abs($b)) return 0;
return (abs($a) > abs($b))?1:-1;
}
$test1 = array(
1 => "a",
2 => "b",
3 => "c"
);
$test2 = array(
-1 => "a",
-2 => "b",
-3 => "c"
);
print_r(array_diff_uassoc($test1, $test2, "compare_func"));
print_r(array_udiff_assoc($test1, $test2, "compare_func"));
Array
(
)
Array
(
[1] => a
[2] => b
[3] => c
)
array_udiff_uassoc
帶索引檢查計算數組的差集,用回調函數比較數據和索引
compare both KEYS and VALUES with a custom comparison function
交集
array_intersect
計算數組的交集
$array1 = array("a" => "green", "red", "blue");
$array2 = array("b" => "green", "yellow", "red");
$result = array_intersect($array1, $array2);
print_r($result);
Array
(
[a] => green
[0] => red
)
array_intersect_key
使用鍵名比較計算數組的交集
$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
$result = array_intersect_key($array1, $array2);
print_r($result);
Array
(
[blue] => 1
[green] => 3
)
array_intersect_assoc
帶索引檢查計算數組的交集
$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "green", "b" => "yellow", "blue", "red");
$result = array_intersect_assoc($array1, $array2);
print_r($result);
Array
(
[a] => green
)
array_uintersect
計算數組的交集,用回調函數比較數據
$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "GREEN", "B" => "brown", "yellow", "red");
$result = array_uintersect($array1, $array2, "strcmp");
print_r($result);
Array
(
[b] => brown
[0] => red
)
array_intersect_ukey
用回調函數比較鍵名來計算數組的交集
$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
$result = array_intersect_ukey($array1, $array2, 'strcmp');
print_r($result);
Array
(
[blue] => 1
[green] => 3
)
array_intersect_uassoc
帶索引檢查計算數組的交集,用回調函數比較索引
用自定義函數比較KEYS
array_uintersect_assoc
帶索引檢查計算數組的交集,用回調函數比較數據
用自定義函數比較VALUES
array_uintersect_uassoc
帶索引檢查計算數組的交集,用回調函數比較數據和索引
用自定義函數比較KEYS and VALUES