Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用array_unshift&;将多个数组存储为一个数组;数组合并 更好的澄清版本_Php_Arrays - Fatal编程技术网

Php 如何使用array_unshift&;将多个数组存储为一个数组;数组合并 更好的澄清版本

Php 如何使用array_unshift&;将多个数组存储为一个数组;数组合并 更好的澄清版本,php,arrays,Php,Arrays,正在完美工作,并为我提供以下阵列 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

正在完美工作,并为我提供以下阵列

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添加到
数组\u 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 ) 
)
我想要的是一个包含所有值的数组,就像第一个示例数组一样

如果存在
$\u GET['z']
,我想获取值

Array ( [0] => a [1] => b [2] => c [3] => x [4] => y [5] => z )
如果
$\u GET['z']
不存在,我只需要这些值

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

在PHP5.6中,可以使用来取消移位
$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\u merge
——下面就可以了

$array = ['x', 'y', 'z'];
if(isset($_GET['z'])){
   $a = ['a', 'b', 'c'];
   array_unshift($array, ...$a);
}
print_r($array);
如果未设置数组,则数组将为
['x','y','z']
;如果设置数组,则数组将为
['a','b','c','x','y','z']

在5.6版本之前,您可以简单地使用以下形式的
阵列拼接
代替
阵列解除移位

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

你似乎把事情复杂化了:

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

我不确定我是否明白你到底想要什么。数组应该是什么样子?@Andreas补充一个更好的解释,请检查。你想要什么还不清楚。如果设置了
$\u GET['z']
,那么最终的数组应该是什么样子?如果没有设置,最后的数组应该是什么样子?我的新答案很好,问题是我需要将所有数组分配给一个数组,因为有一个
If语句
,我也必须在里面添加它的数组值,我不认为我可以在函数中使用
if语句
。我想你已经挂断了使用
array\u merge
,但我编辑了答案,表明它是不必要的。不管怎样,将一个数组中的单个元素反移位到另一个数组的方法是使用splat操作符使用
array\u unshift
,或者使用
array\u splice
。这解决了所有问题,实际上是一个非常惊人的解决方案,只需较少的工作量。谢谢你,先生。这样的回答更有效,但还有一点是
array\u unshift()
part,因为我需要有序的数组。@Axon我不明白。我的回答符合你的要求。结果将是您想要的
[a,b,c,x,y,z]
,因为
$a
数组中位于
$x
之前
array\u unshift()
是一个更为繁重的操作,因为每次添加新元素(它们一个接一个地添加),整个数组都必须重新设置关键字。在我的问题中,我定义
$a array
if
isset($\u GET['z'))
@Axon如果
$a
的内容不应该存在于
if
块之外,那么调整就足够简单了。我修改了我的答案。我更重要的一点是,如果
array\u merge
可以完成这项工作,我就不会使用
array\u unshift
插入多个元素,因为第一个要花费更多的计算成本,对于记录,我同意,实际上,
array\u merge
就是这样做的。但我想保留对该方法的判断,并指出如何将数组转换为其组成元素的列表——我认为这在问题的原始草案中是一个更明显的问题。
$result = isset($_GET['z']) ? array_merge(['a','b','c'],$x) : $x;
print_r($result);