【发布时间】:2015-12-27 15:47:24
【问题描述】:
这里的 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 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
虽然我了解此示例中的每个内置函数各自的作用,但我无法理解它们如何在此函数中协同工作,尽管包含解释性评论...
有人可以帮我分解一下吗?该功能按原样工作得很好,只是让我发疯,我不明白它是如何工作的......
P.S:此函数取自Interleaving multiple arrays into a single array问题。
【问题讨论】:
-
自己写一个类似的函数,它会让你知道什么是必要的。很有可能你最终会自己重写上面的代码。也就是说,在不同的执行点检查上述代码中变量的内容,以了解它的作用。
标签: php function transpose flatten array-filter