Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何有效地合并并可能卷积两个数组?_Php_Arrays_Shuffle_Array Merge - Fatal编程技术网

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

Php 如何有效地合并并可能卷积两个数组?,php,arrays,shuffle,array-merge,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数组的元素可能会相互跟随 例如: 我试过这个: while($a || $b) { $bool = rand(1, 100) >= 50;

假设我有3个数组:

$a = [ 1, 2, 3 ];       // victim #1
$b = [ 4, 5, 6, 7, 8];  // victim #2
$result = [];           // result
我需要按如下顺序合并
$a
$b
,即
$a
数组的每个元素后面都应该跟有数组的元素
$b
。但是,
$b
数组的元素可能会相互跟随

例如:

我试过这个:

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
)
然而,我认为这可能是低效的,因为s和s出现的次数太多了

问题:有没有更有效的方法

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

或者

$a = array(1, 2, 3, 9 );       // victim #1
$b = array( 4, 5, 6, 7, 8);  // victim #2
$result = array_merge($a,$b);

我认为你的产出与你的意思不完全一致。您说过每个
$a
元素后面必须跟
$b
元素。这意味着您的结果必须是[1,2,3,4,5,6,7,8],并且
$a
元素应紧跟在
$b
的每2个元素之后。如果没有,每个
$a
应该遵循
$b
多长时间间隔?如果存在
$b
元素,则至少有一个
$b
。@请澄清您的评论。我一点也不懂all@david我的意思是,例如:
1 4 2 5 6 3 7 8
。它不会按该顺序混合元素。这将得到问题的结果1,2,3,4,5,6,7,8参见示例。Quote:
每个$a元素后面都应该跟$b元素。
。很好的尝试,+1。但效果几乎相同。基于此,我们将看看能做些什么<代码>$a可能为空。灵感来自您的答案。谢谢你的
do{}while()
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;
$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);