Php 如何有效地合并并可能卷积两个数组?
假设我有3个数组: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;
$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);