可以使用[](PHP7.1.0或更高版本)或list()语言结构来卸载数组。可以使用这些结构将数组卸载到各种变量中。
<?php $source_array = ['foo', 'bar', 'baz']; [$foo, $bar, $baz] = $source_array; echo $foo; // 打印 "foo" echo $bar; // 打印 "bar" echo $baz; // 打印 "baz" ?>
在foreach中,可以在迭代过程中使用数组解包来解包多维数组。
<?php $source_array = [ [1, 'John'], [2, 'Jane'], ]; foreach ($source_array as [$id, $name]) { // 这里是 $id 和 $name 的逻辑 } ?>
如果未指定变量,数组元素将被忽略。数组的卸载始终从索引0开始。
<?php $source_array = ['foo', 'bar', 'baz']; // 将索引 2 的元素分配给变量 $baz [, , $baz] = $source_array; echo $baz; // 打印 "baz" ?>
PHP7.1.0以后,联想排列也可以解包。这使您可以显式指定索引,从而在数字索引数组中轻松选择正确的元素。
<?php $source_array = ['foo' => 1, 'bar' => 2, 'baz' => 3]; // 将索引 'baz' 处的元素分配给变量 $three ['baz' => $three] = $source_array; echo $three; // 打印 3 $source_array = ['foo', 'bar', 'baz']; // 将索引 2 处的元素分配给变量 $baz [2 => $baz] = $source_array; echo $baz; // 打印 "baz" ?>
卸载数组可方便地用于交换两个变量。
<?php $a = 1; $b = 2; [$b, $a] = [$a, $b]; echo $a; // 打印 2 echo $b; // 打印 1 ?>
注意:
分配时不支持扩散运算符(…)。
注意:
尝试访问未定义的数组键等同于访问未定义的变量:E_发出WARNING级别的错误消息(PHP8.0.0之前的E_NOTICE级别),结果为null。