Php 简明教程
PHP - Array Destructuring
在 PHP 中,数组解构一词指的是将数组元素提取到单个变量中的机制。它也可以称为解包数组。PHP 的 list() 构造函数用来解构给定的数组,并在一条语句中将其项目分配给变量列表。
list($var1, $var2, $var3, . . . ) = array(val1, val2, val3, . . .);
结果, val1 被分配到 $var1, val2 到 $var2 等等。即使因为括号,您可能认为 list() 是一个函数,但它不是,因为它没有返回值。PHP 将字符串视为一个数组,但是它无法用 list() 解包。此外,list() 中的括号不能是空的。
除了 list(),您还可以使用方括号 [] 作为解构数组的快捷方式。
[$var1, $var2, $var3, . . . ] = array(val1, val2, val3, . . .);
Example
请看以下示例:
<?php
$marks = array(50, 56, 70);
list($p, $c, $m) = $marks;
echo "Physics: $p Chemistry: $c Maths: $m" . PHP_EOL;
# shortcut notation
[$p, $c, $m] = $marks;
echo "Physics: $p Chemistry: $c Maths: $m" . PHP_EOL;
?>
它将生成以下 output −
Physics: 50 Chemistry: 56 Maths: 70
Physics: 50 Chemistry: 56 Maths: 70
Destructuring an Associative Array
在 PHP 7.1.0 之前,list() 只在从 0 开始的数字索引的数字数组上工作。PHP 7.1 数组解构也适用于关联数组。
让我们尝试对以下关联数组进行解构(或拆包),一个具有非数字索引的数组。
$marks = array('p'=>50, 'c'=>56, 'm'=>70);
要对这个数组进行解构,list() 语句将每个数组键与一个独立变量相关联。
list('p'=>$p, 'c'=>$c, 'm'=>$m) = $marks;
此外,您还可以使用 [] 替代解构符号。
['p'=>$p, 'c'=>$c, 'm'=>$m] = $marks;
尝试并执行以下 PHP 脚本 −
<?php
$marks = array('p'=>50, 'c'=>56, 'm'=>70);
list('p'=>$p, 'c'=>$c, 'm'=>$m) = $marks;
echo "Physics: $p Chemistry: $c Maths: $m" . PHP_EOL;
# shortcut notation
['p'=>$p, 'c'=>$c, 'm'=>$m] = $marks;
echo "Physics: $p Chemistry: $c Maths: $m" . PHP_EOL;
?>
Skipping Array Elements
对于索引数组,您可以跳过其某些元素,只将其他元素分配给必需的变量
<?php
$marks = array(50, 56, 70);
list($p, , $m) = $marks;
echo "Physics: $p Maths: $m" . PHP_EOL;
# shortcut notation
[$p, , $m] = $marks;
echo "Physics: $p Maths: $m" . PHP_EOL;
?>
对于关联数组,由于索引不是从 0 开始递增的,因此在分配时不必遵循元素的顺序。
<?php
$marks = array('p'=>50, 'c'=>56, 'm'=>70);
list('c'=>$c, 'p'=>$p, 'm'=>$m) = $marks;
echo "Physics: $p Chemistry: $c Maths: $m" . PHP_EOL;
['c'=>$c, 'm'=>$m, 'p'=>$p] = $marks; # shortcut notation
echo "Physics: $p Chemistry: $c Maths: $m" . PHP_EOL;
?>
Destructuring a Nested Array
您还可以将数组解构的概念扩展到嵌套数组。在以下示例中,嵌套在其内部的子数组是一个索引数组。
<?php
$marks = ['marks' => [50, 60, 70]];
['marks' => [$p, $c, $m]] = $marks;
echo "Physics: $p Chemistry: $c Maths: $m" . PHP_EOL;
?>
即使嵌套数组也是关联数组,解构也同样有效。
<?php
$marks = ['marks' => ['p'=>50, 'c'=>60, 'm'=>70]];
['marks' => ['p'=>$p, 'c'=>$c, 'm'=>$m]] = $marks;
echo "Physics: $p Chemistry: $c Maths: $m" . PHP_EOL;
?>