PHP объединяет несколько массивов в порядке индекса их значений

Я нашел много информации о соединении массивов вместе с помощью array_merge, но мне интересно, насколько легко объединить несколько массивов в порядке их индекса значения, а не просто объединить их вместе.

Например, если бы у нас были следующие три массива:

$a = array('One','Two','Three','Four');
$b = array(1,2,3,4);
$c = array('i','ii','iii','iv');

Можем ли мы объединить их в?:

One,1,i,Two,2,ii,Three,3,iii,Four,4,iv

Вместо:

One, Two, Three, Four, 1, 2, 3, 4, i, ii, iii, iv

person Jeremy Hewitt    schedule 30.06.2013    source источник
comment
Я не думаю, что для этого есть встроенная функция, просто напишите цикл for.   -  person Barmar    schedule 30.06.2013
comment
какова цель? Вам нужно будет создать свою собственную функцию слияния   -  person Kris    schedule 30.06.2013


Ответы (2)


вы можете написать свою пользовательскую функцию следующим образом.

$a = array('One','Two','Three','Four');
$b = array(1,2,3,4);
$c = array('i','ii','iii','iv');

$count = max(count($a), count($b), count($c));
$newarray = array();

for($i=0; $i < $count; $i++) {
   if (isset($a[$i])) $newarray[] = $a[$i];
   if (isset($b[$i])) $newarray[] = $b[$i];
   if (isset($c[$i])) $newarray[] = $c[$i];
}

var_dump($newarray);
person DevZer0    schedule 30.06.2013
comment
Это предполагает, что все массивы имеют одинаковую длину. Лучше сделать $count = max(count($a), count($b), count($c));, а затем выполнить isset() для каждого массива, прежде чем пытаться добавить индекс в $newarray. - person Steven Moseley; 30.06.2013
comment
Спасибо, это очень хорошо помогает. В моем приложении массивы всегда будут одинаковой длины :) - person Jeremy Hewitt; 30.06.2013

На самом деле я бы не стал использовать этот код из-за удобочитаемости, но здорово, что он работает.

Сначала сделайте массив массивов

$a = array('One','Two','Three','Four');
$b = array(1,2,3,4);
$c = array('i','ii','iii','iv');
$arrays = [$a, $b, $c];

тогда

array_unshift($arrays, null);
$n = call_user_func_array('array_merge', call_user_func_array('array_map', $arrays));
print_r($n);

урожаи

Array
(
    [0] => One
    [1] => 1
    [2] => i
    [3] => Two
    [4] => 2
    [5] => ii
    [6] => Three
    [7] => 3
    [8] => iii
    [9] => Four
    [10] => 4
    [11] => iv
)

демо http://codepad.org/FdZKffPQ

он использует этот метод транспонирования матрицы https://stackoverflow.com/a/3423692

person goat    schedule 30.06.2013