Предположим, что у меня есть 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
)
Однако, я думаю, что это может быть неэффективный becau se array_shift()
s и if()
s появляется слишком много раз есть.
Вопрос:Есть ли более эффективный способ сделать это?
P.S .: Спасибо, но я действительно знаю, как использовать array_merge()
. Это не проблема RTM.
Я думаю, что ваш вывод не совсем то, что вы имеете в виду. Вы сказали, что за каждым элементом '$ a' должен следовать элемент' $ b'. Это означает, что ваш результат должен быть [1,2,3,4,5,6,7,8] – david
должен содержать элемент '$ a' после каждых 2 элементов' $ b'. Если нет, то через какой интервал каждый '$ a' следует за' $ b'? – aaron
@aaron хотя бы один '$ b', если есть' $ b' элементы. – BlitZ