按值从多维数组中删除子数组


Removing subarrays from multidimensional array by value

我有这个API,它提供了一个如下所示的数组:

[Air Strike] => Array
    (
        [defindex] => Array
            (
                [0] => 1104
            )
        [prices] => Array
            (
                [6] => Array
                    (
                        [Tradable] => Array
                            (
                                [Craftable] => Array
                                    (
                                        [0] => Array
                                            (
                                                [currency] => metal
                                                [value] => 0.05
                                                [last_update] => 1415072318
                                                [difference] => -0.06
                                                [value_raw] => 0.05
                                            )
                                    )
                                [Non-Craftable] => Array
                                    (
                                        [0] => Array
                                            (
                                                [currency] => metal
                                                [value] => 0.11
                                                [last_update] => 1436478504
                                                [difference] => 0.03
                                                [value_raw] => 0.11
                                            )
                                    )
                            )
                    )
                [11] => Array
                    (
                        [Tradable] => Array
                            (
                                [Craftable] => Array
                                    (
                                        [0] => Array
                                            (
                                                [currency] => metal
                                                [value] => 4
                                                [last_update] => 1456277271
                                                [difference] => -0.165
                                                [value_raw] => 4
                                            )
                                    )
                                [Non-Craftable] => Array
                                    (
                                        [0] => Array
                                            (
                                                [currency] => metal
                                                [value] => 3.66
                                                [last_update] => 1456277553
                                                [difference] => -0.34
                                                [value_raw] => 3.66
                                            )                  
                                    )
                            )
                    )
            )
    )
有什么方法可以在子数组由于

缺乏更好的词而发散时删除子数组,如果项目不可交易或 ['value_raw'] 小于 3?

我想要的输出是这样的:

[Air Strike] => Array
(
    [defindex] => Array
        (
            [0] => 1104
        )
    [prices] => Array
        (
           [11] => Array
                (
                    [Tradable] => Array
                        (
                            [Craftable] => Array
                                (
                                    [0] => Array
                                        (
                                            [currency] => metal
                                            [value] => 4
                                            [last_update] => 1456277271
                                            [difference] => -0.165
                                            [value_raw] => 4
                                        )
                                )
                            [Non-Craftable] => Array
                                (
                                    [0] => Array
                                        (
                                            [currency] => metal
                                            [value] => 3.66
                                            [last_update] => 1456277553
                                            [difference] => -0.34
                                            [value_raw] => 3.66
                                        )                  
                                )
                        )
                )
        )
)

我对此的想法是使用嵌套的foreach()循环遍历每个子数组,并检查['value_raw']的值以及它是否可交易,但是我怎么知道在不删除太多的情况下要删除多少个子数组?也许从 priceindex 开始倒退,然后检查它是否包含多个子数组,以及它是否没有将其与其所有内容一起删除?

您可以通过一系列嵌套foreach()循环获得所需的结果:

foreach( $airStrike['prices'] as $gKey => $group )
{
    foreach( $group as $sKey => $subGroup )
    {
        if( $sKey !== 'Tradable' ) unset( $airStrike['prices'][$gKey][$sKey] );
        else
        {
            foreach( $subGroup as $iKey => $item )
            {
                if( $item[0]['value_raw'] < 3 ) unset( $airStrike['prices'][$gKey][$sKey][$iKey] );
            }
            if( !count( $airStrike['prices'][$gKey][$sKey] ) ) unset( $airStrike['prices'][$gKey][$sKey] );
        }
        if( !count( $airStrike['prices'][$gKey] ) ) unset( $airStrike['prices'][$gKey] );
    }
}

3v4l 演示

具有"可交易"键≠的商品未设置。处理"可交易"子项,如果"value_raw"<3,则未设置。参考您的示例,"可制作"和"不可制作"子数组仅考虑一个子数组:如果它们可以有多个子数组,则必须添加一个额外的foreach() iside foreach( $subGroup )

请注意,在级别 2 和级别 3 foreach()结束时,我检查当前数组是否为空,如果是,则取消设置它。