陣列運算子(Array Operator)

陣列運算子有以下6種:

範例 名稱 說明
$a + $b 聯集(合併) 把$a和$b兩個陣列合併
$a == $b 相等 $a和$b兩個陣列有相同的key/value時為TRUE
$a === $b 完全相等 $a和$b兩個陣列有相同的key/value且型別和順序皆相同時為TRUE
$a != $b 不相等 $a和$b兩個陣列沒有相同的key/value時為TRUE
$a <> $b 不相等 $a和$b兩個陣列沒有相同的key/value時為TRUE
$a !== $b 不完全相等 $a和$b兩個陣列沒有相同的key/value或型別或順序不相同時為TRUE

其中要注意的是+運算子的運算方式,+會把右邊陣列($b)的資料和左邊陣列($a)的資料全部相加,如果$a跟$b有相同的key(索引)時,會保留$a的元素,忽略$b的元素

講這麼多,不如直接來看範例程式碼最清楚了

<?php
    $a = ['a'=>'Apple','b'=>'Banana','c'=>'Cow'];
    $b = ['a'=>'Apple','b'=>'Banana','c'=>'Cow'];
    $c = ['a'=>'Apple','c'=>'Cow','b'=>'Banana'];
    $d = ['a'=>'Zebra','d'=>'Dog','e'=>'Elephant'];

    $array_1 = $a+$d;
    var_dump($array_1);
    /*output:
    array(5) { 
        ["a"]=> string(5) "Apple" 
        ["b"]=> string(6) "Banana" 
        ["c"]=> string(3) "Cow" 
        ["d"]=> string(3) "Dog" 
        ["e"]=> string(8) "Elephant" 
    }
    把$a跟$d合併的結果如上
    由於$a['a']跟$d['a']有出現重複的key(索引),所以會保留左邊的陣列($a),忽略右邊的陣列($b)
    */

    $array_2 = ($a == $c);
    var_dump($array_2);
    /*output:bool(true)
    只比較key/value是否一樣,不比較順序,所以是true
    */

    $array_3 = ($a === $c);
    var_dump($array_3);
    /*output:bool(false)
    比較key/value是否一樣,也比較元素順序
    $a雖然內容跟$c一樣,但是順序不一樣,所以是false
    */

    $array_4 = $a<>$d;
    var_dump($array_4);
    /*output:bool(true)
    $a跟$d內容不一樣,所以是true
    */
?>

但當以數字為索引的陣列要做陣列合併時,使用+的合併結果可能不是你想要的,可以使用array_merge()來合併陣列
array_merge()可以傳入2個陣列當作參數,但如果2個陣列當中有相同的索引值(key),第2個參數的陣列會覆蓋掉第1個參數的陣列

<?php
    $a = array("dindin", "lala");
    $b = array("dindin", "banana", "fool");
    print_r($a + $b);             // Array ( [0] => dindin [1] => lala [2] => fool )
    print_r(array_merge($a, $b)); // Array ( [0] => dindin [1] => lala [2] => dindin [3] => banana [4] => fool )
?>

results matching ""

    No results matching ""