Слияние массивов в порядке - PullRequest
0 голосов
/ 06 декабря 2018

Мне было интересно, как лучше всего создать один массив из двух других массивов, где они объединяются на основе позиции в каждом относительном массиве.

IE

Код:

    $data1 = array("cat", "goat");
    $data2 = array("dog", "cow");

Я знаю, что если вы используете array_merge, вы получите:

Output:
    Array
    (
    [0] => cat
    [1] => goat
    [2] => dog
    [3] => cow
    )

Однако мне нужно:

Output:
    Array
    (
    [0] => cat
    [1] => dog
    [2] => goat
    [3] => cow
    )

Любой совет будет отличным :)

Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 06 декабря 2018

Может быть, что-то вроде этого:

$array1 = [1,2,3,4];
$array2 = [5,6,7,8,9,10,11,12];

$array3 = [];

$length = count($array1) > count($array2) ? count($array1) : count($array2);
for($i = 0; $i < $length; $i++)
{
    if(!empty($array1[$i])) {
        array_push($array3, $array1[$i]);
    }
    if(!empty($array2[$i])) {
        array_push($array3, $array2[$i]);
    }
}

print_r($array3);
0 голосов
/ 06 декабря 2018

Вы также можете попробовать следующее:

$a=call_user_func_array('array_merge',array_map(null,$data1,$data2));

С array_map() с null в качестве аргумента функции вы переводите векторы в двумерный массив.Элементы этого массива будут затем объединены в вызове array_merge().Эта внешняя функция вызывается с помощью call_user_func_array(), который будет обрабатывать каждый элемент массива, который передается в качестве аргумента, в качестве аргументов для указанной функции (в данном случае: "array_merge").

Вы можете найти работающийпример здесь: https://rextester.com/HKNBM64781

0 голосов
/ 06 декабря 2018

Попробуйте это

$newArray = array();
for($i=0;$i<count($data1);$i++){
  $newArray[] = $data1[$i];
  if(isset($data2[$i])
    $newArray[] = $data2[$i];
}

if(count($data2)>count($data1){
  for($i=count($data1);$i<count($data2);$i++){
     $newArray[] = $data2[$i];
  }
}

Надеюсь, это поможет вам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...