我发现了关于我的问题的类似问题,尽管答案中包含了我所需要的一半的建议 - 没有一个能完成所有这些。
我需要开发一个能够应对两者的功能:
我正在尝试根据我发现的两个函数编写一个函数,并且相信我只需要想出while(),但我完全难过了。我似乎无法追踪在他们的条件下使用数组的while循环的任何例子......如果你跟随。
function alternately_merge_arrays() {
$arrays = func_get_args();
$new_array = array();
//
while( count($array) in $arrays is > 0 ) {
//
foreach($arrays as $array) {
if ( count($array) > 0 )
$new_array[] = array_shift($array);
}
}
return $new_array;
}
var_dump(alternately_merge_arrays(array(1,4), array(2,5,7), array(3,6,8,9));
当然我可能完全错了,它需要的不是while()循环。我很酷地使用for()和foreach(),但是如果第一个数组是最短的,那么这些会停止循环,而while()应该继续...
编辑:我需要的输出是:
array(1,2,3,4,5,6,7,8,9)
答案 0 :(得分:1)
我会像这样重写它:
10
关键变化是:
您不需要仅使用function alternately_merge_arrays() {
$arrays = func_get_args();
$new_array = [];
while ($arrays) {
foreach ($arrays as $key => &$array) {
$item = array_shift($array);
if ($item) {
$new_array[] = $item;
} else {
unset($arrays[$key]);
}
}
}
return $new_array;
}
来查看数组是否为空,因为空数组将计算为count
。
如果您使用引用(false
),则&$array
将直接影响相关数组,因此如果已清空,则可以从array_shift
中删除每个数组删除带有$arrays
。
如果您使用的是PHP 5.6+,那么您可以利用variable length argument lists(可变函数)并使用:
array_shift
所以你可以放弃function alternately_merge_arrays(...$arrays) {
并仍然使用可变数量的数组。
答案 1 :(得分:0)
您想要合并2个以上的数组吗?有很多方法可以做到这一点。这看起来有点像你的意图。
<?php
function alternately_merge_arrays() {
$arguments = func_get_args();
$result = [];
foreach($arguments as $argument) {
if (is_array($argument)) $result = array_merge($result,$argument);
else echo "ERROR: argument is not an array.";
}
return $result;
}
var_dump(alternately_merge_arrays(array(1,4), array(2,5,7), array(3,6,8,9)));
输出结果为:
array(9) {
[0]=> int(1)
[1]=> int(4)
[2]=> int(2)
[3]=> int(5)
[4]=> int(7)
[5]=> int(3)
[6]=> int(6)
[7]=> int(8)
[8]=> int(9)
}
答案 2 :(得分:0)
您可以构建一个带有键的数组,这些键根据这种简单的格式给出每个值的位置:column#raw
。然后你要做的就是按键排序并返回值:
function alternately_merge_arrays() {
$result = [];
foreach(func_get_args() as $n => &$array) {
foreach ($array as $k => &$v) {
$result["$k#$n"] = $v;
}
}
ksort($result);
return array_values($result);
}