我想在 php 中执行解构,就像在下面的 javascript 代码中一样:
[a, b, ...rest] = [10, 20, 30, 40, 50];
console.log(a,b,rest);
输出:
10 20 [ 30, 40, 50 ]
如何在 php 中执行该操作?
我的 php 代码是:
<?php
$array = [10, 20, 30, 40, 50];
// Using the list syntax:
//list($a, $b, $c[]) = $array;
// Or the shorthand syntax:
[$a, $b, $c[]] = $array;
echo "$a<br>$b<br>";
print_r ($c);
?>
打印:
10
20
Array ( [0] => 30 )
但我想要 $c 中的“[ 30, 40, 50 ]”
不幸的是,PHP 中的 spread 参数是不可能的。 但是,如果您想实现您的结果,您也可以先解构您想要的值。然后为您的
array_slice()
参数使用$c
函数,如下所示:
<?php
$array = [10, 20, 30, 40, 50];
// Using the list syntax:
//list($a, $b, $c[]) = $array;
// Or the shorthand syntax:
[$a, $b] = $array;
// Returns the array except the first two elements.
$c = array_slice($array, 2);
print_r($c);
?>
结果为:
Array
(
[0] => 30
[1] => 40
[2] => 50
)
数组不断加载,所以使用
[$a, $b, $c[], $c[], $c[]] = $array;
代替。
<?php
$array = [10, 20, 30, 40, 50];
[$a, $b, $c[], $c[], $c[]] = $array;
echo "$a\n$b\n";
print_r($c);
?>
给予
10
20
Array
(
[0] => 30
[1] => 40
[2] => 50
)
PHP 不允许您使用赋值的左侧解包动态数据量,因此对于完全动态的单行代码,请使用赋值的右侧在前两个元素之后准备/分组数据。
代码:(演示)
[$a, $b, $c] = array_merge(array_splice($array, 0, 2), [$array]);
上面的代码片段将按预期用于至少有 2 个元素的输入数组。
我使用传播运算符和函数做到了这一点:
function f1($a,$b,...$c) {
return ['a' => $a, 'b' => $b, 'c' => $c];
}
$array = [10, 20, 30, 40, 50];
extract (f1(...$array));
echo "$a<br>$b<br>";
print_r ($c);
请告诉我这是否是正确的方法。
PHP 没有在赋值的左侧实现扩展运算符。作为替代方案,您可以从数组的头部提取元素:
$rest = [10, 20, 30, 40, 50];
$a = array_shift($rest);
$b = array_shift($rest);
var_dump($a, $b, $rest);
...或:
$rest = [10, 20, 30, 40, 50];
[$a, $b] = [array_shift($rest), array_shift($rest)];
var_dump($a, $b, $rest);
int(10)
int(20)
array(3) {
[0]=>
int(30)
[1]=>
int(40)
[2]=>
int(50)
}
你不能像这样直接解构数组
[$a, $b, $c[]] = $array;
没有直接的方法来解构数组 你可以使用
array_slice()
$arr=['a','b','c','d'];
[$a,$b]=$arr;
print_r($a);
$c=array_slice($arr,2);
print_r($c);
那么如何解构数组。