假设我有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 问题。
答案 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);