如何使用 array_unshift & array_merge将多个阵列存储为一个阵列



更好的澄清版本

$x = ['x', 'y', 'z'];
$a = ['a', 'b', 'c'];
$array = array_merge($x, $a);
print_r($array);

工作正常,给我以下数组

Array ( [0] => x [1] => y [2] => z [3] => a [4] => b [5] => c )

但是我有这样的陈述[在合并部分是完全错误的]

$x = ['x', 'y', 'z'];
if(isset($_GET['z'])){
$a = ['a', 'b', 'c'];
}
$array = array_merge($x, $a); //need to assign that to a variable!
print_r($array);

但是我无法将这样的$a添加到array_merge()中,因此将它们分配给如下所示的变量

$x = ['x', 'y', 'z'];
if(isset($_GET['z'])){
$a = ['a', 'b', 'c'];
}
$merging = [$x];
if(isset($_GET['z'])){
array_unshift($merging, $a);
}
$array = array_merge($merging);
print_r($array);

但我得到的是

Array ( 
[0] => Array ( [0] => a [1] => b [2] => c ) 
[1] => Array ( [0] => x [1] => y [2] => z ) 
)

我想要的是一个包含所有值的数组,就像第一个示例数组一样。

如果存在$_GET['z'],我想获取值

Array ( [0] => a [1] => b [2] => c [3] => x [4] => y [5] => z )

如果$_GET['z']不存在,我只需要这些值

Array ( [0] => x [1] => y [2] => z )

从 PHP 5.6 开始,您可以使用 splat 运算符来取消移动$a的每个元素,而不是数组本身。

$a = ['a', 'b', 'c'];
$x = ['x', 'y', 'z'];
array_unshift($x, ...$a);
print_r($x);

哪些输出

Array
(
[0] => a
[1] => b
[2] => c
[3] => x
[4] => y
[5] => z
)

我认为根本不需要临时$merging阵列和随后的array_merge——下面就可以了。

$array = ['x', 'y', 'z'];
if(isset($_GET['z'])){
$a = ['a', 'b', 'c'];
array_unshift($array, ...$a);
}
print_r($array);

如果未设置$_GET['z']数组,则将在此处['x', 'y', 'z']数组,如果设置数组,则['a', 'b', 'c', 'x', 'y', 'z']数组。

在 5.6 之前,您可以简单地使用以下形式的array_splice代替array_unshift

array_splice($x, 0, 0, $a);

你似乎把事情复杂化了:

$result = isset($_GET['z']) ? array_merge(['a','b','c'],$x) : $x;
print_r($result);

最新更新