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
ifisset($\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);