如何在PHP中合并多个数组,但将值混合在一起-保持它们的顺序
在PHP中有没有一种简单的方法可以将多个数组组合在一起,但要尊重元素的相对顺序 例如,如果我有两个数组如何在PHP中合并多个数组,但将值混合在一起-保持它们的顺序,php,arrays,Php,Arrays,在PHP中有没有一种简单的方法可以将多个数组组合在一起,但要尊重元素的相对顺序 例如,如果我有两个数组 $x = ('1','2','3','4'); 及 我想把它们组合成一个数组 $z = ('1','a','2','b','3','c','4','d','e'); 有没有一种简单易行的方法?理想的解决方案还可以考虑不同长度的数组,就像我的示例一样 array_merge似乎没有达到我想要的效果,因为它只是将一个数组附加到另一个数组 我当前的解决方案按顺序遍历每个数组,并将值推送到我的$z
$x = ('1','2','3','4');
及
我想把它们组合成一个数组
$z = ('1','a','2','b','3','c','4','d','e');
有没有一种简单易行的方法?理想的解决方案还可以考虑不同长度的数组,就像我的示例一样
array_merge似乎没有达到我想要的效果,因为它只是将一个数组附加到另一个数组
我当前的解决方案按顺序遍历每个数组,并将值推送到我的$z数组。这不仅不美观,还要求输入数组具有相同数量的值,这对于我的应用程序来说并不理想
任何细节都可以从0迭代到两个数组的更长长度。
在每个步骤中,若数组$x包含索引处的项,则将其推送到最终数组$z。对数组$y执行同样的操作。我认为这应该可以工作-
$count = max(count($x), count($y));
$newArr = array();
for ($i = 0; $i < $count; $i++) {
// enter values to the new array based on key
foreach(array($x, $y) as $arr) {
if (isset($arr[$i])) {
$newArr[] = $arr[$i];
}
}
}
var_dump($newArr);
$count=max(count($x),count($y));
$newArr=array();
对于($i=0;$i<$count;$i++){
//根据键为新数组输入值
foreach(数组($x,$y)作为$arr){
if(isset($arr[$i])){
$newArr[]=$arr[$i];
}
}
}
var_dump($newArr);
您也可以试试这个
$x = array('1','2','3','4');
$y = array('a','b','c','d','e');
foreach($y as $key=>$value){
if($x[$key]){
$z[] = $x[$key];
$z[] = $value;
}else {
$z[] = $value;
}
}
您可以使用此通用函数,它可以接受任意数量的数组,并将输出一个数组,其中元素首先取自第一个“列”,然后取自第二个,以此类推:
function mix_merge(...$args) {
return call_user_func_array('array_merge',
array_map(function($i) use ($args) { return array_column($args, $i); },
range(0, max(array_map('count', $args))-1)));
}
// Sample data:
$x = array('1','2','3','4');
$y = array('a','b','c','d','e');
$z = array('A','B','C');
$res = mix_merge($x, $y, $z);
结果数组将为:
['1', 'a', 'A', '2', 'b', 'B', '3', 'c', 'C', '4', 'd', 'e']
询问者已经在这样做了“…我当前的解决方案按顺序遍历每个数组,并将值推送到我的$z数组”。你能指出你想要的更好的解决方案吗?他说他执行两个循环,每个数组一个。我的建议是只循环一次。这不起作用的原因有很多:在
foreach
之后没有开始括号,而是结束括号,$newArr
声明为数组,但在循环中用作字符串,等等。请在发布之前测试您的代码。当然,答案是在我写评论时编辑的。。。该死!它现在可以工作了,删除了downvote。内部循环在$i
的每次迭代中执行两次,这与我们分别为$x和$y编写检查相同。
['1', 'a', 'A', '2', 'b', 'B', '3', 'c', 'C', '4', 'd', 'e']