3

配列 1 の値が偶数の場所にあり、配列 2 の値が奇数の場所にある場合、2 つの配列をマージするにはどうすればよいですか?

例:

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

4 に答える 4

5

これは、2 つの配列の長さやキーに関係なく正しく機能します (インデックスは作成されません)。

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

編集:私の元の答えにはバグがありました。それを修正しました。

于 2011-03-07T11:37:03.240 に答える
2

$arr1 と $arr2 が同じサイズの単純な列挙型配列であると仮定するか、$arr2 には $arr1 よりも 1 つ少ない要素しかないとします。

$arr1 = array(11, 34); 
$arr2 = array(12, 666);
$output = array();
foreach($arr1 as $key => $value) {
    $output[] = $value;
    if (isset($arr2[$key])) {
        $output[] = $arr2[$key];
    }
}
于 2011-03-07T11:34:16.050 に答える
2

これを試して

$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
)
于 2011-03-07T11:54:00.747 に答える
1

より多くの項目を含む配列を調べ、ループ インデックスを使用して両方の配列にアクセスし、必要に応じてそれらを組み合わせて結果の 1 つにします...

$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
   }
}
于 2011-03-07T11:39:27.460 に答える