将多个阵列交织成单个阵列

时间:2009-12-07 14:59:56

标签: php arrays

我需要将几个数组合并为一个数组。描述我正在寻找的东西的最好方法是将数组“交错”成一个数组。

例如,从数组#1中取出第一项并附加到最​​终数组。从数组#2获取第一项并追加到最终数组。从数组#1获取第二项并追加......等等。

最终的数组看起来像这样:

阵列#1.element#1 阵列#2.element#1 。 。

“踢球者”是各个阵列可以具有不同的长度。

是否有更好的数据结构可供使用?

4 个答案:

答案 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作为排序索引。