解释这个自定义函数是如何在PHP中工作的
在这里,PHP中的这个函数允许以一种方式合并任意N个不同长度的数组,输出数组的顺序如下:解释这个自定义函数是如何在PHP中工作的,php,function,array-filter,Php,Function,Array Filter,在这里,PHP中的这个函数允许以一种方式合并任意N个不同长度的数组,输出数组的顺序如下:Array1[0]、Array2[0]、…、ArrayN[0]、Array1[1]、Array2[1]、…、ArrayN[1]…: function array_zip_merge() { $output = array(); // The loop incrementer takes each array out of the loop as it gets emptied
Array1[0]、Array2[0]、…、ArrayN[0]、Array1[1]、Array2[1]、…、ArrayN[1]…
:
function array_zip_merge() {
$output = array();
// The loop incrementer takes each array out of the loop as it gets emptied by array_shift().
for ($args = func_get_args(); count($args); $args = array_filter($args)) {
// &$arg allows array_shift() to change the original.
foreach ($args as &$arg) {
$output[] = array_shift($arg);
}
}
return $output;
}
// test
$a = range(1, 10);
$b = range('a', 'f');
$c = range('A', 'B');
echo implode('', array_zip_merge($a, $b, $c)); // prints 1aA2bB3c4d5e6f78910
虽然我了解本例中的每个内置函数各自的功能,但我无法完全理解这些函数是如何在这个函数中协同工作的,尽管其中包括解释注释
有人能帮我把它分解一下吗?该功能工作得很好,只是让我疯狂,我不明白它是如何工作的
注意:这个函数是从问题中提取出来的。在数组\u zip\u merge中,for语句总是取每个数组的第一个值,并将它们分别添加到输出变量中 因为array\u shift删除它返回的元素,所以在每个循环中,第一个元素都是不同的。当它因此变空时,循环将无所事事并中断
如果您仍然不理解,请询问您遇到问题的代码的具体部分。数组
$a
、$b
和$c
分别有10、6和2个元素
$a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
$b = ['a', 'b', 'c', 'd', 'e', 'f'];
$c = ['A', 'B'];
当您将数组作为array\u zip\u merge()函数的参数输入时,请查看for
循环。func\u get\u args()
将使用提供的所有参数设置$args
。开始第一次循环运行时
$args = [$a, $b, $c];
count($args) = 3;
在foreach
循环中,array\u shift
将返回每个数组的第一个元素,从而产生类似的$output
$output = [1, 'a', 'A'];
现在阵列看起来像
$a = [2, 3, 4, 5, 6, 7, 8, 9, 10];
$b = ['b', 'c', 'd', 'e', 'f'];
$c = ['B'];
在第一个for
循环结束时,array\u filter
函数将测试是否有任何数组为空,并将其从$args
中删除。同样的事情也会在第二次运行时发生,在第二次for
循环结束时,变量如下所示
$a = [3, 4, 5, 6, 7, 8, 9, 10];
$b = ['c', 'd', 'e', 'f'];
$c = [];
$output = $output = [1, 'a', 'A', 2, 'b', 'B'];
//because $c is empty array_filter() removes it from $args
$args = [$a, $b];
因此,在for
循环count($args)
的第三次迭代中,将返回2
。当array\u shift
删除$b
的最后一个元素时,计数($args)
将返回1
。迭代将继续,直到所有数组都为空您自己编写一个类似的函数,它将告诉您需要什么。很可能你最终会自己重写上面的代码。也就是说,在不同的执行点检查上述代码中变量的内容,以了解其作用。感谢您如此详细的回答,您一步一步的迭代在我脑海中澄清了问题,最后一切都开始变得有意义:))