очистить массив пустых пространств [дубликаты]

1

У меня есть этот массив, и я хочу избавиться от тех индексов, которые в них не имеют значения, поэтому, например, в индексе [0] я хочу избавиться от [0] и [4], поэтому у меня будет 3 массив значений и т.д....

Array
(
    [0] => Array
        (
            [0] => 
            [1] => 
            [2] => 7
            [3] => 
            [4] => 8
            [5] => 
        )

    [1] => Array
        (
            [0] => 
            [1] => 
            [2] => 9
            [3] => 10
            [4] => 
        )

    [2] => Array
        (
            [0] => 
            [1] => 11
            [2] => 12
            [3] => 
        )

)
  • 0
    Может быть, array_filter ?
  • 0
    Кроме того, вы хотите сохранить ключи или сдвинуть их? То есть должен ли element[0][1] быть 1 или 2 после операции?
Теги:
matrix
web

3 ответа

0
Лучший ответ

Это хороший пример использования array_filter. Check for! Empty() позволяет удалить как пустые строки, так и нулевые значения.

$filter_func = function($input) {
    $output = [];
    foreach ($input as $set) {
        $output[] = array_values(
            array_filter($set, function($element) {
                return !empty($element);
            })
        );
    }
    return $output;
}
  • 0
    это работало, но как я мог установить внутренние значения как [0] или [1] вместо значений предыдущего массива? Array ([0] => Array ([2] => 7 [4] => 8) [1] => Array ([2] => 9 [3] => 10) [2] => Array ([ 1] => 11 [2] => 12))
  • 0
    Я только что обновил свое решение. Вы бы обернули вызов array_filter массивом_значений.
Показать ещё 3 комментария
1
foreach ($array as $key=>$value) {
  if ($value == '') { unset($array[$key]); }
}

Это должно сделать это.

0

Вы можете использовать array_filter()

$my_array = array_filter($my_array);

Если вам нужно "повторно проиндексировать" после, вы можете запустить $my_array = array_values($my_array)

Пример:

$a   = array();
$a[] = '';
$a[] = 1;
$a[] = null;
$a[] = 2;
$a[] = 3;

$a = array_filter($a);
print_r($a);

Вывод:

Array
(
    [1] => 1
    [3] => 2
    [4] => 3
)
  • 0
    я пробовал с этим, он не работал для меня
  • 1
    Ой. хорошо работает array_filter, но я не осознавал, что вы используете многомерный массив, потому что он не будет работать на более глубоких уровнях массива, если вы не сделали их вручную.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню