我需要将几个数组合并为一个数组。描述我正在寻找的东西的最好方法是将数组“交错”成一个数组。
例如,从数组#1中取出第一项并附加到最终数组。从数组#2获取第一项并追加到最终数组。从数组#1获取第二项并追加......等等。
最终的数组看起来像这样:
阵列#1.element#1 阵列#2.element#1 。 。
“踢球者”是各个阵列可以具有不同的长度。
是否有更好的数据结构可供使用?
答案 0 :(得分:27)
例如,
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
答案 1 :(得分:3)
如果数组只有数字键,这里有一个简单的解决方案:
$longest = max( count($arr1), count($arr2) );
$final = array();
for ( $i = 0; $i < $longest; $i++ )
{
if ( isset( $arr1[$i] ) )
$final[] = $arr1[$i];
if ( isset( $arr2[$i] ) )
$final[] = $arr2[$i];
}
如果你有命名键,你可以为每个数组使用array_keys
函数,而不是遍历键数组。
如果您需要两个以上的数组(或可变数量的数组),那么您可以使用嵌套循环(尽管我认为您需要$arr[0]
和$arr[1]
作为个别数组)。
答案 2 :(得分:1)
我只会使用array_merge()
,但这显然取决于你究竟做了什么。
这会将这些数组相互追加,而元素只有在具有相同的非数字键时才会被替换。这对你来说可能不是问题,或者因为属性顺序而有可能被解决,因为第一个数组元素的内容将被后面的元素覆盖。
答案 3 :(得分:0)
如果您有n个数组,则可以使用SortedList,并使用arrayIndex * n + arrayNumber
作为排序索引。