如何删除多维数组的空“分支”

问题描述 投票:0回答:1

我有以下问题。我得到了这个数组结构:

Array
(
    [1702] => Array
        (
            [unit] => Unit name
            [info] => Array
                (
                    [735100] => Array
                        (
                            [group] => Ac Fluorhidricos
                        )

                    [0] => Array
                        (
                            [group] => Other
                            [services] => Array
                                (
                                    [731171] => [ARES70] Oil 01
                                    [731172] => [ARES71] Oil 02
                                    [731112] => [ARES11] Oil 03
                                )

                        )

                    [733496] => Array
                        (
                            [group] => Activity
                        )

                    [732216] => Array
                        (
                            [group] => Water SMA
                        )

                    [732280] => Array
                        (
                            [group] => Water MAR SMA
                        )

                    [732307] => Array
                        (
                            [group] => Blue water SMA
                        )

                    [732369] => Array
                        (
                            [group] => Residual water SMA
                            [services] => Array
                                (
                                    [732373] => [ARESSMA05] Water 01
                                    [732388] => [ARESSMA20] Water 02
                                    [732374] => [ARESSMA06] Water 03
                                    [732397] => [ARESSMA29] Water 04
                                    [732375] => [ARESSMA07] Water 05
                                )

                        )

                )

        )

)

但是我需要删除数组中所有不包含“服务”的元素:

Array
(
    [1702] => Array
        (
            [unit] => Unit name
            [info] => Array
                (

                    [0] => Array
                        (
                            [group] => Other
                            [services] => Array
                                (
                                    [731171] => [ARES70] Oil 01
                                    [731172] => [ARES71] Oil 02
                                    [731112] => [ARES11] Oil 03
                                )

                        )

                    [732369] => Array
                        (
                            [group] => Residual water SMA
                            [services] => Array
                                (
                                    [732373] => [ARESSMA05] Water 01
                                    [732388] => [ARESSMA20] Water 02
                                    [732374] => [ARESSMA06] Water 03
                                    [732397] => [ARESSMA29] Water 04
                                    [732375] => [ARESSMA07] Water 05
                                )

                        )

                )

        )

)

我一直在尝试使用 array_filter 函数,但没有得到我需要的结果。我将非常感谢您的帮助。

我希望有一些线索或功能可以帮助我解决问题。

php multidimensional-array array-unset
1个回答
0
投票

您可以这样做,假设您的数组的结构始终像您发布的那样(第一级中的数字键,第二级中的

unit
info
,数组列表 潜在 具有
services
在他们的第一级)。当然,有很多假设,但如果您知道这就是您将拥有的结构,那么它就会起作用。

<?php
$arr = [
    1702 => [
        "unit" => "Unit name",
        "info" => [
            735100 => [
                "group" => "Ac Fluorhidricos",
            ],
            0 => [
                "group" => "Other",
                "services" => [
                    "731171" => "[ARES70] Oil 01",
                    "731172" => "[ARES71] Oil 02",
                    "731112" => "[ARES11] Oil 03",
                ]
            ],
            733496 => [
                "group" => "Activity"
            ],
            732216 => [
                "group" => "Water SMA"
            ],
            732280 => [
                "group" => "Water MAR SMA"
            ],
            732307 => [
                "group" => "Blue water SMA"
            ],
            732369 => [
                "group" => "Residual water SMA",
                "services" => [
                    732373 => "[ARESSMA05] Water 01",
                    732388 => "[ARESSMA20] Water 02",
                    732374 => "[ARESSMA06] Water 03",
                    732397 => "[ARESSMA29] Water 04",
                    732375 => "[ARESSMA07] Water 05"
                ]
            ]
        ]
    ]
];

$endArr = [];
foreach($arr as $key=>$value) {
    // Just setting it out right
    // We'll remove what we don't need
    // once we come to it...
    $endArr[$key] = $value;
    $info = $value["info"];
    foreach($info as $itemId=>$item) {
        // ... right about here
        if(!in_array("services",array_keys($item))) {
            unset($endArr[$key]["info"][$itemId]);
        }
    }
    
    // Optional - if there's nothing left within info, remove it
    // Commented out, since you didn't specify whether you want that
    // if(!$endArr[$key]["info"]) {
    //    unset($endArr[$key];  
    // }
}

print_r($endArr);

输出:

Array
(
    [1702] => Array
        (
            [unit] => Unit name
            [info] => Array
                (
                    [0] => Array
                        (
                            [group] => Other
                            [services] => Array
                                (
                                    [731171] => [ARES70] Oil 01
                                    [731172] => [ARES71] Oil 02
                                    [731112] => [ARES11] Oil 03
                                )
                        )
                    [732369] => Array
                        (
                            [group] => Residual water SMA
                            [services] => Array
                                (
                                    [732373] => [ARESSMA05] Water 01
                                    [732388] => [ARESSMA20] Water 02
                                    [732374] => [ARESSMA06] Water 03
                                    [732397] => [ARESSMA29] Water 04
                                    [732375] => [ARESSMA07] Water 05
                                )
                        )
                )
        )
)

测试一下这里

© www.soinside.com 2019 - 2024. All rights reserved.