PHP Array – удаление пустых значений

Как пропустить этот массив и удалить все пустые значения:

[28] => Array ( [Ivory] => [White] => ) [29] => Array ( [Ivory] => [White] => ) [30] => Array ( [Ivory] => [White] => 36 ) [31] => Array ( [White] => 24 ) 

Так скажите, что он удалит 28, 29 и просто Ivory с 30 …

Благодаря!

Я считаю, что это сделает то, что вы ищете:

 foreach( $array as $key => $value ) { if( is_array( $value ) ) { foreach( $value as $key2 => $value2 ) { if( empty( $value2 ) ) unset( $array[ $key ][ $key2 ] ); } } if( empty( $array[ $key ] ) ) unset( $array[ $key ] ); } 

Он будет проходить через ваш внешний массив, спуститься в любые массивы, которые он содержит, и удалить ключи, значения которых пусты. Затем, как только это будет сделано, он удалит любые ключи из внешнего массива, чьи подвалы тоже были пустыми.

Обратите внимание, что это не сработает для общего массива, только того, который вы предоставили (двухмерного).

Я вижу, что у вас уже есть рабочее решение, но просто для удовольствия, с поддержкой array_map:

 $array = array_filter(array_map('array_filter', $array)); 

Другой способ, используя preg_grep :

 foreach($array as $key => $subarray) { $array[$key] = preg_grep('/^$/', $subarray, PREG_GREP_INVERT); } 

Обновление: Забыл об удалении пустых массивов. Метод, показанный в ответе @ Райана, также может быть применен здесь.

 //Check Array Remove Empty Key $ixx=0; $ix=0;//Set Array First. while(end(array_keys($a1))>=$ix){ //Check Last Key in Array if($a1[$ix]!=""){ //Check Empty Key $ax[$ixx]=$a1[$ix];$ixx++; } //Remove Empty Key $ix++; } //End Check Array Remove Empty Key print_r($ax);//Print Array After remove Empty Key 

Для тех, кто ищет чистую переменную, которая представляет собой простой массив или многомерный массив (вложенный массив с неизвестной глубиной), вот мое предлагаемое решение: (оно создается как статическая функция в классе, но может работать и вне класса -> просто удалите себя: 🙂

  public static function clean($Array, $Strict=true) { if( ! is_array($Array)) { return $Array; } $cleaned = array (); foreach ($Array as $key => $value) { if($Strict) { if(!empty($value)) { $tmp = self::clean($value,$Strict); if(!empty($tmp)) { $cleaned[$key] = $tmp; } } }//strict else { if(is_array($value)) { if(!empty($value)) { $tmp = self::clean($value,$Strict); if(!empty($tmp)) { $cleaned[$key] = $tmp; } } } elseif(strlen($value) > 0) { $tmp = self::clean($value,$Strict); if(strlen($tmp) > 0) { $cleaned[$key] = $tmp; } } }//not strict } //end foreach return $cleaned; } 

Надеюсь сохранить кого-то время 🙂 Приветствия

Вероятно, вам нужно немного изменить код ниже.

 foreach ($arr as $key => $value) { if($value == "") { unset($value[$key]); } } с foreach ($arr as $key => $value) { if($value == "") { unset($value[$key]); } }