我有这个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()
结束时,我检查当前数组是否为空,如果是,则取消设置它。