0
99
2015-08-14

Фильтрация многомерных массивов в PHP

Примеры функций позволяющих произвести фильтрацию пустых значений из массива в PHP.
Понравилась страница? Поставь свою оценку!
PLUGIN_STAR_RATINGS.SCORE_TEXTPLUGIN_STAR_RATINGS.VOTES_TEXT

Фильтрация пустых значений из массива в PHP лучше всего делать с помощью . Давайте возьмем простой массив, например: array_filter()

$data = array( null, true, false, 0, 1, 11, '', 'test' );

Теперь давайте пройдем через это : array_filter()

array_filter( $data );

В итоге мы получаем следующее:

array( true, 1, 11, 'test' );

Потрясающие! Что происходит, когда нам нужно отфильтровать этот массив?

$data = array(
    null,
    true,
    false,
    0,
    1,
    11,
    '',
    'test',
    <span class="hiddenGrammarError" pre=""><span class="hiddenGrammarError" pre="param "><span class="hiddenGrammarError" pre=""><span class="hiddenGrammarError" pre="param ">array(),
    array</span></span></span></span>(
        null,
        true,
        false,
        0,
        1,
        11,
        '',
        'test',
        array(),
        array(
            null,
            true,
            false,
            0,
            1,
            11,
            '',
            'test',
            array(),
        ),
    ),
);

Ну, PHP не предоставляет способ рекурсивной фильтрации многомерного массива.

Вот простая служебная функция, которая работает точно так же , но рекурсивно: array_filter()

/**
 * Recursively filter an array
 *
 * @param array $array
 * @param callable $callback
 *
 * @return array
 */
function array_filter_recursive( array $array, callable $callback = null ) {
    $array = is_callable( $callback ) ? array_filter( $array, $callback ) : array_filter( $array );
    foreach ( $array as &$value ) {
        if ( is_array( $value ) ) {
            $value = call_user_func( __FUNCTION__, $value, $callback );
        }
    }

    return $array;
}

Функция работает так же, как PHP и даже позволяет настраивать обратный вызов, если вы хотите его предоставить. Запуск нашего многомерного массива через возвращает этот результат: array_filter() array_filter_recursive()

array(
    true,
    1,
    11,
    'test',
    array(
        true,
        1,
        11,
        'test',
        array(
            true,
            1,
            11,
            'test',
        ),
    ),
);




Статья была переведена для блога TechBlog.SDStudio.top

Источник: wpscholar.com