【问题标题】:PHP using wildcard for accessing JSON objectPHP 使用通配符访问 JSON 对象
【发布时间】:2019-06-03 10:11:40
【问题描述】:

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

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;

【问题讨论】:

  • 如果您从 JSON 中获取,请使用 json_decode($input, true); 获取关联数组。然后你可以适当地使用array_values
  • 我试过了,但是怎么用呢?如果订单发生变化,这并不准确
  • 您的对象中是否只有一个顶级属性?即只有一个ext-118-27-16-0-23
  • 是的,只有一个这样命名的键
  • 我不只是指名字。该级别还有其他属性吗?

标签: php json wildcard


【解决方案1】:

这就是我认为你可以做的事情

$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

【讨论】:

    猜你喜欢
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 2021-11-29
    • 2020-11-29
    相关资源
    最近更新 更多