2024 年 PHP Conference Japan

陣列運算子

陣列運算子
範例 名稱 結果
$a + $b 聯集 $a$b 的聯集。
$a == $b 相等 如果 $a$b 具有相同的鍵/值對,則為 true
$a === $b 恆等 如果 $a$b 擁有相同的鍵/值對,且順序和類型相同,則為 true
$a != $b 不等於 如果 $a 不等於 $b,則為 true
$a <> $b 不等於 如果 $a 不等於 $b,則為 true
$a !== $b 不全等 如果 $a 不全等於 $b,則為 true

+ 運算子會將右邊的陣列附加到左邊的陣列;對於兩個陣列中都存在的鍵,將使用左邊陣列的元素,而右邊陣列中相符的元素將被忽略。

<?php
$a
= array("a" => "apple", "b" => "banana");
$b = array("a" => "pear", "b" => "strawberry", "c" => "cherry");

$c = $a + $b; // $a 和 $b 的聯集
echo "$a 和 $b 的聯集: \n";
var_dump($c);

$c = $b + $a; // $b 和 $a 的聯集
echo "$b 和 $a 的聯集: \n";
var_dump($c);

$a += $b; // $a += $b 的聯集為 $a 和 $b
echo "$a += $b 的聯集: \n";
var_dump($a);
?>
執行此程式碼片段將會輸出以下結果
Union of $a and $b:
array(3) {
  ["a"]=>
  string(5) "apple"
  ["b"]=>
  string(6) "banana"
  ["c"]=>
  string(6) "cherry"
}
Union of $b and $a:
array(3) {
  ["a"]=>
  string(4) "pear"
  ["b"]=>
  string(10) "strawberry"
  ["c"]=>
  string(6) "cherry"
}
Union of $a += $b:
array(3) {
  ["a"]=>
  string(5) "apple"
  ["b"]=>
  string(6) "banana"
  ["c"]=>
  string(6) "cherry"
}

如果陣列元素具有相同的鍵和值,則在比較中它們被視為相等。

範例 #1 比較陣列

<?php
$a
= array("apple", "banana");
$b = array(1 => "banana", "0" => "apple");

var_dump($a == $b); // bool(true)
var_dump($a === $b); // bool(false)
?>

另請參閱

新增註解

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

cb at netalyst dot com
16 年前
聯集運算子的行為與我第一眼看到的 생각 不同。它根據陣列的鍵值(key),而不是值(value)來實現聯集(某種程度上)。

例如
<?php
$a
= array('one','two');
$b=array('three','four','five');

//非陣列值的聯集
echo '$a + $b : ';
print_r ($a + $b);

//陣列值的聯集
echo "array_unique(array_merge($a,$b)):";
// 參考自 http://oreilly.com/catalog/progphp/chapter/ch05.html
print_r (array_unique(array_merge($a,$b)));
?>

//輸出

$a + $b : 陣列
(
[0] => one
[1] => two
[2] => five
)
array_unique(array_merge(陣列,陣列)):陣列
(
[0] => one
[1] => two
[2] => three
[3] => four
[4] => five
)
Q1712 at online dot ms
17 年前
該範例可能會讓您認為完全一致運算子會返回 true,因為 apple 的鍵值是一個字串,但事實並非如此,因為如果字串陣列鍵值是整數的標準表示法,它會自動取得一個數字鍵值。

完全一致運算子只要求兩個陣列中的鍵值順序相同

<?php
$a
= array (0 => "apple", 1 => "banana");
$b = array (1 => "banana", 0 => "apple");

var_dump($a === $b); // 輸出 bool(false)

$b = array ("0" => "apple", "1" => "banana");

var_dump($a === $b); // 輸出 bool(true)
?>
dfranklin at fen dot com
20 年前
請注意,+ 運算子不會重新編號數字陣列鍵。如果您有兩個數字陣列,並且它們的索引重疊,+ 運算子會對每個數字鍵使用第一個陣列的值,僅在第一個陣列沒有該索引的值時才添加第二個陣列的值。範例:

$a = array('red', 'orange');
$b = array('yellow', 'green', 'blue');
$both = $a + $b;
var_dump($both);

產生以下輸出:

array(3) { [0]=> string(3) "red" [1]=> string(6) "orange" [2]=> string(4) "blue" }

要獲得一個 5 元素的陣列,請使用 array_merge。

Dan
xtpeqii at Hotmail dot com
7 年前
$a=[ 3, 2, 1];
$b=[ 6, 5, 4];
var_dump( $a + $b );

輸出
array(3) {
[0]=>
int(3)
[1]=>
int(2)
[2]=>
int(1)
}

會出現上述輸出的原因是 PHP 中的每個陣列都是關聯式陣列。
由於 $b 中的 3 個元素與 $a 中的元素具有相同的鍵(或數字索引),因此聯集運算子會忽略 $b 中的這些元素。
amirlaher AT yahoo DOT co SPOT uk
21 年前
[]= 可以被視為一個陣列運算子(就像 .= 是一個字串運算子一樣)。
[]= 將一個元素推送到陣列的末尾,類似於 array_push
<?
$array= array(0=>"Amir",1=>"needs");
$array[]= "job";
print_r($array);
?>
印出:Array ( [0] => Amir [1] => needs [2] => job )
Dan Patrick
12 年前
值得一提的是,陣列聯集運算子的功能幾乎與 array_replace 相同,唯一的例外是參數的優先順序相反。
匿名
2 年前
合併兩個陣列並僅保留唯一值。
附加第二個陣列的值。
不考慮鍵。

<?php
$array1
= [
0 => 'apple',
1 => 'orange',
2 => 'pear',
];

$array2 = [
0 => 'melon',
1 => 'orange',
2 => 'banana',
];

$result = array_keys(
array_flip($array1) + array_flip($array2)
);
?>

結果
[
[0] => "apple"
[1] => "orange"
[2] => "pear"
[3] => "melon"
[4] => "banana"
}
To Top