如何将多个数组存储为一个数组,使用array_unshift& array_merge

时间:2017-07-23 13:31:43

标签: php arrays

更好的澄清版本

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

2 个答案:

答案 0 :(得分:1)

从PHP 5.6开始,您可以使用splat operator来取消$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);

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

在5.6之前,您只需使用以下表单中的array_splice代替array_unshift

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

答案 1 :(得分:1)

你似乎过于复杂化了:

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