json PHP -获取未知数组键的值

i86rm4rw  于 2022-11-19  发布在  PHP
关注(0)|答案(3)|浏览(167)

基于API的结果

"name": {
    "common": "Italy",
    "official": "Italian Republic",
    "nativeName": {
        "ita": {
            "official": "Repubblica italiana",
            "common": "Italia"
        }
    }
},

让我们假设我总是想要“通用”名称,但根据国家的不同,“关键”将有所不同(现在是“ita”,但它可以是任何名称)
什么是最干净的方式总是获得“公共”值独立于上述键名称?(所以一个动态函数总是获得公共值)

vfhzx4xs

vfhzx4xs1#

使用固定结构,您可以做到:

$arr = json_decode('{"name": {
    "common": "Italy",
    "official": "Italian Republic",
    "nativeName": {
        "ita": {
            "official": "Repubblica italiana",
            "common": "Italia"
        }
    }
}}',true);

$country = key($arr['name']['nativeName']);  //ita
$common = $arr['name']['nativeName'][$country]['common'];  //Italia

echo '$country = '.$country.', $common = '.$common;

演示:https://3v4l.org/W4sqI

7lrncoxx

7lrncoxx2#

您可以像这样迭代数据结构的这一部分,以获得common的键和值

$json = '{
    "name": {
    "common": "Italy",
    "official": "Italian Republic",
    "nativeName": {
        "ita": {
            "official": "Repubblica italiana",
            "common": "Italia"
        }
    }
}
}';

foreach (json_decode($json)->name->nativeName as $key => $native){
    echo "Key = $key, common = {$native->common}";
}

结果

Key = ita, common = Italia
rqdpfwrv

rqdpfwrv3#

如果 只有 一 个 nativeName , 则 可以 将 get_mangled_object_vars()key() 一起 使用 , 如下 所 示 :

$a = json_decode('{"name": {
    "common": "Italy",
    "official": "Italian Republic",
    "nativeName": {
        "ita": {
            "official": "Repubblica italiana",
            "common": "Italia"
        }
    }
}}');
print_r(key(get_mangled_object_vars($a->name->nativeName))); // ita

中 的 每 一 个
参考 编号 :

或者 , 您 可以 将 ArrayObjectgetIterator()key() 结合 使用 , 如下 所 示 :

$a = json_decode('{"name": {
        "common": "Italy",
        "official": "Italian Republic",
        "nativeName": {
            "ita": {
                "official": "Repubblica italiana",
                "common": "Italia"
            }
        }
}}');
$arrayobject = new ArrayObject($a->name->nativeName);
$iterator = $arrayobject->getIterator();
echo $iterator->key(); //ita

格式
参考 编号 :

相关问题