【问题标题】:Extract string from array从数组中提取字符串
【发布时间】:2018-06-22 14:52:11
【问题描述】:

如果我访问以下网址:https://api.site.com/logged/me,我会得到以下输出。

"status": "success",
"id": "https://api.site.com/logged/me",
"denormalized": {
    "https://api.site.com/logged/me": {
        "data": {
            "user": {
                "id": "https://api.site.com/me/897348924"
    }

如何使用 PHP 回显 ID 字段?

【问题讨论】:

  • 你尝试过什么,你追求的是 2 个 id 字段中的哪一个?
  • 我没有尝试任何真正有效的方法,我说的是第二个 ID 字段。 - 抱歉,没有注意到其中 2 个 - @NigelRen

标签: php arrays json regex


【解决方案1】:

所以我猜您的output“数据”实际上是有效的 json,并且不像您的示例中那样损坏。所以它应该看起来像这样,或者你需要调整它以获得这样的东西:

$json = '{
    "status": "success",
    "id": "https://api.site.com/logged/me",
    "denormalized": {
        "https://api.site.com/logged/me": {
            "data": {
                "user": {
                    "id": "https://api.site.com/me/897348924"
                }
            }
        }
    }
}';

然后您不需要正则表达式,但取决于您想要获取 url 的元素(第二个是键),您可以这样做:

$jsonObj = json_decode($json, true);

var_dump($jsonObj['id']);
var_dump(array_keys($jsonObj['denormalized'])[0]);

哦,如果您需要获得最内在的id,这是一个可能的解决方案:

var_dump($jsonObj['denormalized'][$jsonObj['id']]['data']['user']['id']);

查看结果或在此处玩游戏PHP Fiddle

【讨论】:

    【解决方案2】:

    正则表达式: (?:"user"\s?:\s?{\r?\n\s+"id"\s?:\s?"(?<id>[^"]+)"\r?\n\s+})

    详情:

    (?:)非捕获组

    \s? 匹配任何空白字符

    \r? 匹配回车符,\n 匹配换行符(换行符)

    (?<id>[^"]+) Named Capture Group id " 匹配字符 " 字面意思

    Regex demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多