2013-06-16 3 views
1

Предположим, что я начинаю с массивом, который выглядит как:Вложенные циклы и формирование массива

$array_1 = array(array(1,2,3), array(2,4,5), array(3,6,7)); 

Для простоты предположим, что у меня есть правило, которое гласит: вычеркнуть первый подмассив, а затем удалить первые элементы остальные подмассивы. Это дало бы результат:

$new_array = array(array(4,5), array(6,7)) 

Тогда предположим, я расширяю эту проблему в более крупные массивы, как:

$array_2 = array(array(1,2,3,4), array(2,3,4,5), array(3,4,5,6), array(4,5,6,7)); 

У меня есть такое же правило здесь - удалить первый подмассив, а затем удалить первые элементы остальных подмассивов , BUT Это правило должно быть продолжено до тех пор, пока наименьший подмассив не будет содержать только два элемента (как в первом примере). Так что на первом этапе процесса, мой новый массив будет выглядеть следующим образом:

$new_array_s1 = array(array(3,4,5), array(4,5,6), array(5,6,7)); 

Но в финальной стадии, завершенная массив будет выглядеть следующим образом:

$new_array_s2 = array(array(5,6), array(6,7)); 

Для контекста, вот мой код за $ array_1 Например:

<?php 

$array_1 = array(array(1,2,3), array(2,4,5), array(3,6,7)); 
$array_shell = $array_1; 
unset($array_shell[0]); 
$array_size = count($array_shell); 

$i = 0; 
$cofactor = array(); 

while($i < $array_size) { 
$el_part_[$i] = $array_1[$i]; 
unset($el_part_[$i][0]); 
$el_part_[$i] = array_values($el_part_[$i]); 
array_push($cofactor, $el_part_[$i]); 

++$i; 
} 

echo '<pre>',print_r($cofactor,1),'</pre>'; 

?> 

Мой вопрос: Как я могу обобщить этот код, чтобы работать для размера массивов N?

ответ

3

Вам не нужен сложный код .. Просто цикл и использовать array_shift

Пример:

print_r(cleanUp($array_1)); 

Функция

function cleanUp($array) { 
    array_shift($array); 
    foreach($array as $k => $var) { 
     is_array($var) && array_shift($array[$k]); 
    } 
    return $array; 
} 

See Live DEMO

1
$num = count($array_1); 
for($i=0;$i<=$num;$i++) 
{ 
if($i==0) 
unset($array_1[$i]); 
else unset($array_1[$i][0]); 
} 
1

Построить ИНГ от ответа Бабы, работать с N элементов массива (предполагая, что каждый массив содержит одинаковое количество элементов):

<?php 
$array_1 = array(array(1,2,3,4), array(2,4,5,6), array(3,6,7,8)); 

$array = $array_1; 
while(count($array[0]) > 2) 
    $array = cleanUp($array); 

print_r($array); 

    function cleanUp($array) { 
     array_shift($array); 
     foreach($array as $k => $var) { 
      is_array($var) && array_shift($array[$k]); 
     } 
     return $array; 
    } 

Это будет держать сокращения до суб-массивы имеют только два элемента.

-Ken

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