在我的左手上,我已经得到了这个"键" :
localisation.adresse.commune.id
还有许多像这样的价值观,这些都是动态的(我不能在我的代码中使用它们,因为我不知道它们会是什么)。
另一方面,我有一个像这样的数组(来自json解码):
Array
(
[localisation] => Array
(
[adresse] => Array
(
[adresse1] => Le Chatelard
[codePostal] => 42820
[etat] => France
[commune] => Array
(
[id] => 16418
)
)
)
)
我无法列出所有"键"我要开发,所以我需要自动获取$ object的价值['本地化'] [' adresse'] [' commune'] [' ID&#39]。
我已尝试过此功能但不起作用:
$test['localisation']['adresse']['commune']['id'] = 16418 ;
$var = '$test[\'localisation\'][\'adresse\'][\'commune\'][\'id\']' ;
echo $var ; // $test['localisation']['adresse']['commune']['id']
var_dump($$var) ; // NULL Notice: Undefined variable: $test['localisation']['adresse']['commune']['id']
var_dump(${$var}) ; // NULL Notice: Undefined variable: $test['localisation']['adresse']['commune']['id']
我想它正在寻找一个复杂名称的简单变量,而不是查看多维数组,但我不知道我该怎么做......
向你寻求帮助!
答案 0 :(得分:1)
除了遍历数组并尝试在内部数组中找到键(如果有的话)之外,我没有看到别的方法。
我想出了两个变体:递归和迭代。当"深度"他们也将处理案件。密钥和阵列的不同,例如,如果你的$key
包含的元素多于数组的深度,那么{@ 1}}将返回,如果更少 - 那么将返回最后一个键下的任何元素。
NULL
$a = [
'localisation' => [
'adresse' => [
'adresse1' => 'Le Chatelard',
'codePostal' => 42820,
'etat' => 'France',
'commune' => [
'id' => 16418,
],
],
],
];
$key = 'localisation.adresse.commune.id';
function getValueByKeyRecursively($a, $key)
{
$keyList = explode('.', $key);
$currentKey = array_shift($keyList);
// Found the value
if (empty($currentKey)) {
return $a;
}
// No more depth to traverse or no such key
if (!is_array($a) || !array_key_exists($currentKey, $a)) {
return null;
}
return getValueByKeyRecursively($a[$currentKey], implode('.', $keyList));
}
var_dump(getValueByKeyRecursively($a, $key)); // outputs: int(16418)
答案 1 :(得分:0)
试试这个:
$str = '{
"localisation" : {
"adresse" : {
"adresse1" : "Le Chatelard",
"codePostal" : "42820",
"etat" : "France",
"commune" : {
"id" : 16418
}
}
}
}
';
$data = json_decode($str, true);
$var = $data['localisation']['adresse']['commune']['id'] ;
echo $var ;
print_r($data);