2024 年 PHP 日本大会

数组运算符

数组运算符
示例 名称 结果
$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 年前
联合运算符的行为与我最初想象的有所不同。它基于数组的键实现联合(某种形式的联合),而不是基于值。

例如
<?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 : Array
(
[0] => one
[1] => two
[2] => five
)
array_unique(array_merge(Array,Array)):Array
(
[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