2015-05-24 4 views
1

Ниже у меня есть цикл, который создаст два массива нечетных и эвенов. Но что я действительно нужен один цикл, который проходит через array и получает первые нечетных элементов и показать их, а затем показать следующий даже элементов, то следующий 4 нечетных пункта и т.д. ,Цикл Foreach, покажите X нечетных элементов, затем X даже элементов

<?php  

    $array = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14); 
    $odd = array(); 
    $even = array(); 
    foreach($array AS $item){ 
     if ($item & 1) { 
      $odd[] = $item ;    
     }else{ 
      $even[] = $item ; 
     } 
    } 
?> 

Я думал, что наличие двух массивов seprate может сделать вещи проще, но я не уверен.

+0

Ваши два массива кажется отлично. После того, как вы их сделаете, вы можете прокручивать каждый массив в группах по 4 для их печати. – Barmar

+0

Итак, где мы с этим вопросом? – Rizier123

ответ

2

Это должно работать для вас:

Сначала мы получаем все четные значения в один массив ($even) и все нечетные значения в один массив ($odd) с array_filter().

Тогда мы просто перебрать как массивы с array_map(), где мы array_chunk() оба массива на группы по 4. В анонимной функции мы просто array_merge() массивы с результатом ($mixed) массива.

<?php 

     $array = range(1, 14); 

     $even = array_filter($array, function($v){ 
      return $v % 2 == 0; 
     }); 

     $odd = array_filter($array, function($v){ 
      return $v % 2 == 1; 
     }); 

     $mixed = []; 
     array_map(function($v1, $v2)use(&$mixed){ 
      $mixed = array_merge($mixed, $v1); 
      $mixed = array_merge($mixed, $v2); 
     }, array_chunk($even, 4), array_chunk($odd, 4)); 

     print_r($mixed); 

?> 

Тогда вы можете просто цикл через $mixed массив. Как это:

foreach($mixed as $v) 
    echo $v . "<br>"; 

выход:

2 
4 
6 
8 
1 
3 
5 
7 
10 
12 
14 
9 
11 
13 
+0

Это решение действительно хорошо выглядит, но ват случается, если в массиве содержится более 14 элементов? – TheDeveloper

+0

@ TheDeveloper Просто попробуйте :) Он отлично работает – Rizier123

+0

гениальное решение – TheDeveloper

Смежные вопросы