Перемещение нескольких массивов в один массив

Мне нужно объединить несколько массивов в один массив. Лучший способ описать то, что я ищу, – это «перемежение» массивов в один массив.

Например, возьмите один элемент из массива # 1 и добавьте в последний массив. Получите элемент один из массива №2 и добавьте его к окончательному массиву. Получите два элемента из массива # 1 и добавьте … и т. Д.

Окончательный массив будет выглядеть примерно так:

массив # 1.элемент # 1 массив # 2.элемент # 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 

Если в массивах есть только цифровые клавиши, вот простое решение:

 $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] в качестве отдельных массивов) ,

Я бы просто использовал array_merge() , но это, очевидно, зависит от того, что именно вы делаете.

Это добавит эти массивы друг к другу, в то время как элементы будут заменены только тогда, когда они имеют один и тот же нечисловой ключ. И это не может быть проблемой для вас, или это может быть возможно решить из-за порядка атрибутов, так как содержимое элементов первого массива будет перезаписано более поздними.

Если у вас есть n массивов, вы можете использовать arrayIndex * n + arrayNumber и использовать arrayIndex * n + arrayNumber в качестве индекса сортировки.