2014-11-12 2 views
2

У меня есть следующий массивудалить пустой массив из многомерного массива

$cal = array(
    0 => array(
     0 => array(
      0 => '*', 
      1 => 2, 
      2 => 3, 
     ) , 
     1 => array(
      0 => 6, 
      1 => 7, 
      2 => 8, 
      3 => 9, 
      4 => 10, 
     ) , 
     2 => array(
      0 => '*', 
      1 => '*', 
      2 => 15, 
      3 => '*', 
      4 => 17, 
     ) , 
     3 => array(
      0 => 20, 
      1 => 21, 
      2 => 22, 
      3 => 23, 
      4 => 24, 
     ) , 
     4 => array(
      0 => 27, 
      1 => 28, 
      2 => 29, 
      3 => 30, 
      4 => 31, 
     ) , 
    ) , 
    1 => array(
     0 => array() , 
     1 => array(
      0 => 3, 
      1 => 4, 
      2 => 5, 
      3 => '*', 
      4 => 7, 
     ) , 
     2 => array(
      0 => 10, 
      1 => 11, 
      2 => 12, 
      3 => 13, 
      4 => 14, 
     ) , 
     3 => array(
      0 => 17, 
      1 => 18, 
      2 => 19, 
      3 => 20, 
      4 => 21, 
     ) , 
     4 => array(
      0 => 24, 
      1 => 25, 
      2 => 26, 
      3 => 27, 
      4 => 28, 
     ) , 
    ) , 
    2 => array(
     0 => array() , 
     1 => array(
      0 => 3, 
      1 => 4, 
      2 => 5, 
      3 => 6, 
      4 => '*', 
     ) , 
     2 => array(
      0 => 10, 
      1 => 11, 
      2 => 12, 
      3 => 13, 
      4 => 14, 
     ) , 
     3 => array(
      0 => 17, 
      1 => 18, 
      2 => 19, 
      3 => 20, 
      4 => 21, 
     ) , 
     4 => array(
      0 => 24, 
      1 => 25, 
      2 => 26, 
      3 => 27, 
      4 => 28, 
     ) , 
     5 => array(
      0 => 31, 
     ) , 
    ) , 
    3 => array(
     0 => array(
      0 => 1, 
      1 => 2, 
      2 => 3, 
      3 => 4, 
     ) , 
     1 => array(
      0 => 7, 
      1 => 8, 
      2 => 9, 
      3 => 10, 
      4 => 11, 
     ) , 
     2 => array(
      0 => 14, 
      1 => 15, 
      2 => 16, 
      3 => 17, 
      4 => 18, 
     ) , 
     3 => array(
      0 => 21, 
      1 => 22, 
      2 => 23, 
      3 => 24, 
      4 => 25, 
     ) , 
     4 => array(
      0 => 28, 
      1 => 29, 
      2 => 30, 
     ) , 
    ) , 
    4 => array(
     0 => array(
      0 => 1, 
      1 => 2, 
     ) , 
     1 => array(
      0 => '*', 
      1 => '*', 
      2 => '*', 
      3 => 8, 
      4 => 9, 
     ) , 
     2 => array(
      0 => 12, 
      1 => 13, 
      2 => 14, 
      3 => 15, 
      4 => 16, 
     ) , 
     3 => array(
      0 => 19, 
      1 => 20, 
      2 => 21, 
      3 => 22, 
      4 => 23, 
     ) , 
     4 => array(
      0 => 26, 
      1 => 27, 
      2 => 28, 
      3 => 29, 
      4 => 30, 
     ) , 
    ) , 
    5 => array(
     0 => array() , 
     1 => array(
      0 => 3, 
      1 => '*', 
      2 => 5, 
      3 => 6, 
     ) , 
     2 => array(
      0 => 9, 
      1 => 10, 
      2 => 11, 
      3 => 12, 
      4 => '*', 
     ) , 
     3 => array(
      0 => 16, 
      1 => 17, 
      2 => 18, 
      3 => 19, 
      4 => 20, 
     ) , 
     4 => array(
      0 => 23, 
      1 => 24, 
      2 => 25, 
      3 => 26, 
      4 => 27, 
     ) , 
     5 => array(
      0 => 30, 
     ) , 
    ) , 
    6 => array(
     0 => array(
      0 => 1, 
      1 => 2, 
      2 => 3, 
      3 => 4, 
     ) , 
     1 => array(
      0 => 7, 
      1 => 8, 
      2 => 9, 
      3 => 10, 
      4 => 11, 
     ) , 
     2 => array(
      0 => 14, 
      1 => 15, 
      2 => 16, 
      3 => 17, 
      4 => 18, 
     ) , 
     3 => array(
      0 => 21, 
      1 => 22, 
      2 => 23, 
      3 => 24, 
      4 => 25, 
     ) , 
     4 => array(
      0 => 28, 
      1 => 29, 
      2 => 30, 
      3 => 31, 
     ) , 
    ) , 
    7 => array(
     0 => array(
      0 => 1, 
     ) , 
     1 => array(
      0 => 4, 
      1 => 5, 
      2 => 6, 
      3 => 7, 
      4 => 8, 
     ) , 
     2 => array(
      0 => 11, 
      1 => 12, 
      2 => 13, 
      3 => 14, 
      4 => 15, 
     ) , 
     3 => array(
      0 => 18, 
      1 => 19, 
      2 => 20, 
      3 => 21, 
      4 => 22, 
     ) , 
     4 => array(
      0 => 25, 
      1 => 26, 
      2 => 27, 
      3 => 28, 
      4 => 29, 
     ) , 
     5 => array() , 
    ) , 
    8 => array(
     0 => array(
      0 => 1, 
      1 => 2, 
      2 => 3, 
      3 => 4, 
      4 => 5, 
     ) , 
     1 => array(
      0 => 8, 
      1 => 9, 
      2 => 10, 
      3 => 11, 
      4 => 12, 
     ) , 
     2 => array(
      0 => 15, 
      1 => 16, 
      2 => 17, 
      3 => 18, 
      4 => 19, 
     ) , 
     3 => array(
      0 => 22, 
      1 => 23, 
      2 => 24, 
      3 => 25, 
      4 => 26, 
     ) , 
     4 => array(
      0 => 29, 
      1 => 30, 
     ) , 
    ) , 
    9 => array(
     0 => array(
      0 => 1, 
      1 => 2, 
      2 => 3, 
     ) , 
     1 => array(
      0 => '*', 
      1 => '*', 
      2 => '*', 
      3 => '*', 
      4 => '*', 
     ) , 
     2 => array(
      0 => '*', 
      1 => '*', 
      2 => '*', 
      3 => '*', 
      4 => '*', 
     ) , 
     3 => array(
      0 => 20, 
      1 => 21, 
      2 => 22, 
      3 => 23, 
      4 => 24, 
     ) , 
     4 => array(
      0 => 27, 
      1 => 28, 
      2 => 29, 
      3 => 30, 
      4 => 31, 
     ) , 
    ) , 
    10 => array(
     0 => array() , 
     1 => array(
      0 => 3, 
      1 => '*', 
      2 => 5, 
      3 => 6, 
      4 => 7, 
     ) , 
     2 => array(
      0 => 10, 
      1 => 11, 
      2 => 12, 
      3 => 13, 
      4 => 14, 
     ) , 
     3 => array(
      0 => 17, 
      1 => 18, 
      2 => 19, 
      3 => 20, 
      4 => 21, 
     ) , 
     4 => array(
      0 => 24, 
      1 => 25, 
      2 => 26, 
      3 => '*', 
      4 => 28, 
     ) , 
     5 => array() , 
    ) , 
    11 => array(
     0 => array(
      0 => '*', 
      1 => 2, 
      2 => 3, 
      3 => 4, 
      4 => '*', 
     ) , 
     1 => array(
      0 => 8, 
      1 => 9, 
      2 => 10, 
      3 => 11, 
      4 => 12, 
     ) , 
     2 => array(
      0 => 15, 
      1 => 16, 
      2 => 17, 
      3 => 18, 
      4 => 19, 
     ) , 
     3 => array(
      0 => 22, 
      1 => 23, 
      2 => 24, 
      3 => 25, 
      4 => 26, 
     ) , 
     4 => array(
      0 => 29, 
      1 => 30, 
      2 => 31, 
     ) , 
    ) , 
) 

Я пытаюсь удалить пустой массив из его родительского используя следующий код:

for($m = 0; $m < count($cal); $m++){ 
    for($w = 0; $w < count($cal[$m]); $w++){ 
     if(empty($cal[$m][$w])){ 
      array_shift($cal[$m]); 
     } 
    } 
} 

результат является (пожалуйста см индекс 10)

10 => array(
     0 => array(
      0 => 10, 
      1 => 11, 
      2 => 12, 
      3 => 13, 
      4 => 14, 
     ) , 
     1 => array(
      0 => 17, 
      1 => 18, 
      2 => 19, 
      3 => 20, 
      4 => 21, 
     ) , 
     2 => array(
      0 => 24, 
      1 => 25, 
      2 => 26, 
      3 => '*', 
      4 => 28, 
     ) , 
     3 => array() , 
    ) , 

, что я ожидаю Remo ve первый и последний, вместо этого удалите первый и второй массив и оставите последний массив еще там. Есть идеи?

+0

'array_shift' удаляет элемент из начала массива – Exlord

+0

array_shift удаляет (и возвратов) всегда первый элемент данного массива. Почему вместо этого вы не используете unset? – evilive

+0

О, да, я забыл об этом, вместо использования array_shift я должен удалить массив по его индексу, я прав? –

ответ

2

Попробуйте использовать array_filter() вместо так array_shift() просто берет на себя первый элемент:

foreach ($cal as &$value) { 
    $value = array_filter($value); 
} 
+0

большое спасибо, как переиндексировать его тогда? –

+0

@DarielPratama просто добавляет '$ value = array_values ​​($ value);' для сброса своих соответствующих индексов – Ghost

0

Используйте unset ($ cal [$ m] [$ w]) вместо array_shift ($ cal [$ m]).

Это приведет к

10 => array(
    1 => array(
     0 => 3, 
     1 => '*', 
     2 => 5, 
     3 => 6, 
     4 => 7, 
    ) , 
    2 => array(
     0 => 10, 
     1 => 11, 
     2 => 12, 
     3 => 13, 
     4 => 14, 
    ) , 
    3 => array(
     0 => 17, 
     1 => 18, 
     2 => 19, 
     3 => 20, 
     4 => 21, 
    ) , 
    4 => array(
     0 => 24, 
     1 => 25, 
     2 => 26, 
     3 => '*', 
     4 => 28, 
    ) , 
) , 

Обратите внимание на клавишу [0] больше нет

+0

yes, key [0] больше не существует. как переиндексировать его? –

+0

добавить строку $ cal [$ m] = array_values ​​($ cal [$ m]) после второго цикла для цикла – user1187347

0

Вы можете использовать простую рекурсивную функцию для обхода каждого из них следующим образом:

<?php 

    function removeEmpties(&$array) 
    { 
     foreach($array as $key=>$val) 
     { 
      if(count($val)==0) 
      { 
       unset($array[$key]); 
      } 
      else 
      { 
       removeEmpties($val); 
      } 
     } 
    } 

    $yourArray=array(... etc); 
    removeEmpties($yourArray); 

?> 
0

попробовать этот код:

foreach ($cal as &$arr) 
{ 
    $arr = array_filter($arr); 
} 

$cal = array_filter($cal); 
Смежные вопросы