0

假设我有 3 个数组:

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

我需要合并$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 回答