过滤掉多维数组

时间:2017-10-03 08:47:22

标签: php arrays

我想过滤通过将XML转换为数组而创建的数组。 我想删除key = 0和空值(fe&#34; InvalidKey&#34;)的数组的所有父键,但不是那些具有自定义名称且没有值的数组(fe&#34;柱&#34)。 我已经使用过array_filter(即使与array_map结合使用),但这些函数会从数组中过滤掉太少或太多的信息。 我还试图创建一个loopable函数来检查当前数组是否有一个0和一个空值的键,但我不知道如何获取当前数组的父键,fe:< / p>

Array
(
    [InvalidKey] => Array
        (
            [0] => *NULL*
        )
);

key($arrInput) = 0;
parent::key($arrInput) = "InvalidKey";

那么,如何得到:

Array
(
    [test] => 
    [demo] => 524018
    [column] => 
    [xml] => Array
    (
        [Header] => Array
            (
                [0] => Array
                    (
                        [ValidKey] => Array
                            (
                                [0] => 1234
                            )

                        [InvalidKey] => Array
                            (
                                [0] =>
                            )
                    )

            )

        [Body] => Array
            (
                [0] => *NULL*
            )

        [Footer] => Array
            (
                [0] => Array
                    (
                        [ValidKey] => Array
                            (
                                [0] => I am valid
                            )

                        [MoreValidKey] => Array
                            (
                                [0] => I am valid too
                            )

                        [InvalidKey] => Array
                            (
                                [0] =>
                            )
                    )

            )

    )
)

要:

Array
(
    [test] => 
    [demo] => 524018
    [column] => 
    [xml] => Array
    (
        [Header] => Array
            (
                [0] => Array
                    (
                        [ValidKey] => Array
                            (
                                [0] => 1234
                            )
                    )

            )

        [Footer] => Array
            (
                [0] => Array
                    (
                        [ValidKey] => Array
                            (
                                [0] => I am valid
                            )

                        [MoreValidKey] => Array
                            (
                                [0] => I am valid too
                            )
                    )

            )

    )
)

PS:使用的数组键名是可变的。为简单起见,我使用&#34;(In)ValidKey&#34;。阵列可以尽可能深,所以我不能用2 for循环。

1 个答案:

答案 0 :(得分:0)

您需要编写一个自定义脚本来检查数组的所有元素。

示例:

<?php
$test = [
    [
        [
            "asdf",
            "",
            0,
            false,
            true,
            [
                "asdf",
                "",
                []
            ]
        ],
        []
    ],
    []
];

function removeEmptyElements(array $array)
{
    foreach ($array as $key => $value) {
        if (is_array($value))
            $value = removeEmptyElements($value);

        if (empty($value) && false !== $value && 0 !== $value)
            unset($array[$key]);
        else
            $array[$key] = $value;
    }

    return $array;
}

print_r(removeEmptyElements($test));