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

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

[28] => Array
    (
        [Ivory] => 
        [White] => 
    )

[29] => Array
    (
        [Ivory] => 
        [White] => 
    )

[30] => Array
    (
        [Ivory] => 
        [White] => 36
    )

[31] => Array
    (
        [White] => 24
    )

Так сказать, он удалит 28, 29 и просто слоновая кость с 30...

Спасибо!

Ответ 1

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

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 ] );
}

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

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

Ответ 2

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

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

Ответ 3

Другой способ: preg_grep:

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

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

Ответ 4

//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

Ответ 5

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

    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;
    }

Надеюсь спасти кого-то время:) Приветствия

Ответ 6

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

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