从数组中提取字符串

时间:2018-01-13 08:25:18

标签: php arrays json regex

如果我访问以下网址: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 个答案:

答案 0 :(得分:0)

所以我猜你的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

答案 1 :(得分:0)

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

enter image description here

<强>详细信息:

(?:)非捕获组

\s?匹配任何空格字符

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

(?<id>[^"]+)命名的捕获组ID“字面匹配”

Regex demo