2013-10-07 2 views
0

Предположим, что у меня есть 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.

+0

Я думаю, что ваш вывод не совсем то, что вы имеете в виду. Вы сказали, что за каждым элементом '$ a' должен следовать элемент' $ b'. Это означает, что ваш результат должен быть [1,2,3,4,5,6,7,8] – david

+1

должен содержать элемент '$ a' после каждых 2 элементов' $ b'. Если нет, то через какой интервал каждый '$ a' следует за' $ b'? – aaron

+0

@aaron хотя бы один '$ b', если есть' $ b' элементы. – BlitZ

ответ

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; 
+0

Он не будет смешивать элементы в этом порядке. – BlitZ

+0

это даст результат 1,2,3,4,5,6,7,8 основы вашего вопроса – david

+0

См. Пример. Цитата: 'каждый элемент $ должен следовать за элементом $ b. – BlitZ

0
$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); 
Смежные вопросы