PHP 使用通配符访问 JSON 对象

PHP using wildcard for accessing JSON object

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

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 
        ) 
    )
) 

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

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

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

以下是我认为您可以做的事情

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

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

要点:

  • 将对象转换为数组~(array) $obj
  • 使用current()提取第一个(仅)属性
  • 使用array_filter()将地址数组减少到version 4
  • 使用array_map()只提取addr属性

您可能希望在最终数组上使用 array_values() 到 re-index 它来自 0

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