0

3 つの配列があるとします。

$a = [ 1, 2, 3 ];       // victim #1
$b = [ 4, 5, 6, 7, 8];  // victim #2
$result = [];           // result

arrayの各要素の後に array の要素が続くように、マージする必要があり$aます。ただし、配列の要素は互いに続く場合があります。$b$a$b$b

例えば:

1 4 2 5 6 3 7 8

私はこれを試しました:

while($a || $b)
    {
        $bool = rand(1, 100) >= 50;

        if($a)
            {
                $result[] = array_shift($a);
            }

        if($b)
            {
                $result[] = array_shift($b);
            }

        if($bool && $b)
            {
                $result[] = array_shift($b);
            }
    }

これにより、目的の出力が得られます。

Array
(
    [0] => 1
    [1] => 4
    [2] => 5
    [3] => 2
    [4] => 6
    [5] => 7
    [6] => 3
    [7] => 8
)

array_shift()ただ、 s やif()s が多すぎて効率が悪いのではないかと思います。

質問: それを行うためのより効率的な方法はありますか?

PS:ありがとうございますarray_merge()RTMの問題ではありません

4

2 に答える 2

1
foreach ($a as $value) {
    $result[] = $value;
    do {
        $bool = rand(0,1) == 1;
        $result[] = array_shift($b);
    } while ($bool);
}
// insert the remaining of value $b in the $result
foreach ($b as $value)
    $result[] = $value;
于 2013-10-07T10:51:50.133 に答える
1
$a = array(1, 2, 3 );       // victim #1
$b = array( 4, 5, 6, 7, 8);  // victim #2


foreach($a as $first)
{
   $result[] = $first;
}

foreach($b as $second)
{
   $result[] = $second;
}

あるいは

$a = array(1, 2, 3, 9 );       // victim #1
$b = array( 4, 5, 6, 7, 8);  // victim #2
$result = array_merge($a,$b);
于 2013-10-07T10:56:32.163 に答える