将 php 中的数组解构为另一个数组

问题描述 投票:0回答:6

我想在 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 arrays destructuring
6个回答
2
投票

不幸的是,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
)

2
投票

数组不断加载,所以使用

[$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
)

2
投票

PHP 不允许您使用赋值的左侧解包动态数据量,因此对于完全动态的单行代码,请使用赋值的右侧在前两个元素之后准备/分组数据。

代码:(演示

[$a, $b, $c] = array_merge(array_splice($array, 0, 2), [$array]);

上面的代码片段将按预期用于至少有 2 个元素的输入数组。


1
投票

我使用传播运算符和函数做到了这一点:

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);

请告诉我这是否是正确的方法。


0
投票

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)
}

0
投票

你不能像这样直接解构数组

[$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);

那么如何解构数组。

© www.soinside.com 2019 - 2024. All rights reserved.