PHP使用通配符访问JSON对象

时间:2019-06-03 10:11:40

标签: php json wildcard

我正在尝试访问特定的密钥。这是我的对象:

stdClass Object ( 
    [ext-118-27-16-0-23] => Array ( 
        [0] => stdClass Object ( 
            [version] => 6 
            [addr] => 0000:0000:0000:0000:0000:FFFF:C0A8:0001
        ) 
        [1] => stdClass Object ( 
            [version] => 4 
            [addr] => 192.168.0.1 
        ) 
    )
) 

在这种情况下,我期望输出键192.168.0.1的值addr。第一个键(ext-118-27-16-0-23)发生变化,我不知道他的价值。 该模式应类似于ext-*

所以我想我需要这样的东西:

$addr = {WILDCARD}[1]->addr;

1 个答案:

答案 0 :(得分:3)

这就是我想你可以做的

$ipv4Addresses = array_map(function($ip) {
    return $ip->addr;
}, array_filter(current((array) $obj), function($ip) {
    return $ip->version === 4;
}));

这将返回所有IPv4 addr属性的数组。

要点:

  • 将对象投射到一个数组〜(array) $obj
  • 使用current()提取第一个(唯一的)属性
  • 使用array_filter()将地址数组减少为version 4
  • 使用array_map()仅提取addr属性

您可能希望在最终数组上使用array_values(),以从0重新索引它。

演示〜https://3v4l.org/LfDg8