如何有效地合并并可能卷积两个数组?

时间:2013-10-07 10:40:56

标签: php arrays shuffle array-merge

假设我有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()if() s出现的次数过多,它可能效率低下。

问题: 有更有效的方法吗?

P.S。: 谢谢,但我确实知道如何使用array_merge()。这不是 RTM 问题。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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);