PHP中的數組(集合)

並集

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) elem1===(string) elem2 時被認爲相等。也就是說使用了嚴格檢查,字符串的表達必須相同。

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

參考

發佈了94 篇原創文章 · 獲贊 110 · 訪問量 80萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章