我有一个字符串,我将其解析为JSON子对象。例如,我以“ me-name-first”爆炸:
$string = explode('-', "me-name-first");
在json中,我有以下顺序:
$json = json_decode('{"me":{"name":{"first":"John","last":"Doe"}}}');
我想动态创建订单,并在缺少其中一个键的情况下对其进行更新。所以不用写:
$json = $json->{$string[0]}->{$string[1]}->{$string[2]}; // and so on, can be even 99
我想自动执行:
$int = 0;
foreach($json as $key=>$value)
{
if($key === $string[$int])
{
// great, iterate over childs,
// and once the iteration ends,
// return the last one's value
$json = /* Last value, equals to $json->{$string[?]}->{$string[?]}->{$string[?]} ... */;
}
$int++;
}
我该怎么办?
我试图用一个函数包装它,但是它返回了无限循环。
谢谢
答案 0 :(得分:1)
您可以遍历$string
直到处理了最深的嵌套级别:
$string = explode('-', "me-name-first");
$json = json_decode('{"me":{"name":{"first":"John","last":"Doe"}}}');
$value = $json;
while (count($string) > 0) {
$key = array_shift($string);
$value = $value->$key;
}
var_dump($value);
// string(4) "John"
这假设$string
将始终兼容,并且永远不会包含不属于json对象的内容,例如"me-name-middle"
仅在name
仅包含first
和{{ 1}}。
如果您需要考虑类似情况,则此解决方案可能过于简单。