PHP :: Как объединить 2 массива, когда значения массива 1 будут в четных местах, а массив 2 будет в нечетных местах? - PullRequest
3 голосов
/ 07 марта 2011

Как объединить два массива, если значения массива 1 будут в четных местах, а массив 2 - в нечетных?

Пример:

$arr1=array(11, 34,30);
$arr2=array(12, 666);
$output=array(11, 12, 34, 666,30);

Ответы [ 4 ]

3 голосов
/ 07 марта 2011

Это будет работать правильно, независимо от длины двух массивов или их ключей (они не индексируются в них):

$result = array();
while(!empty($arr1) || !empty($arr2)) {
    if(!empty($arr1)) {
        $result[] = array_shift($arr1);
    }
    if(!empty($arr2)) {
        $result[] = array_shift($arr2);
    }
}

Редактировать : Мой оригинальный ответ имелошибка;исправил это.

2 голосов
/ 07 марта 2011

попробуйте

$arr1=array(11,34,30,35);
$arr2=array(12,666,23);

$odd= array_combine(range(0,2*count($arr1)-1,2), $arr1);
$even = array_combine(range(1,2*count($arr2)-1,2), $arr2);
$output=$odd+$even;
ksort($output);
echo "<pre>";
print_r($output);

возвращает

Array
(
    [0] => 11
    [1] => 12
    [2] => 34
    [3] => 666
    [4] => 30
    [5] => 23
    [6] => 35
)
2 голосов
/ 07 марта 2011

Предполагая, что $ arr1 и $ arr2 являются простыми перечисляемыми массивами одинакового размера или где $ arr2 имеет только один элемент, меньший, чем $ arr1.

$arr1 = array(11, 34); 
$arr2 = array(12, 666);
$output = array();
foreach($arr1 as $key => $value) {
    $output[] = $value;
    if (isset($arr2[$key])) {
        $output[] = $arr2[$key];
    }
}
1 голос
/ 07 марта 2011

Пройдите по массиву с большим количеством элементов, используйте индекс цикла для доступа к обоим массивам и объедините их в результирующий, как требуется ...

$longer = (count($arr1) > count($arr2) ? $arr1 : $arr2);
$result = array();
for ($i = 0; $i < count($longer); $i++) {
   $result[] = $arr1[i];
   if ($arr2[i]) {
      $result[] = $arr2[i];
   } else {
      $result[] = 0; // no item in arr2 for given index
   }
}
...