如何生成对象密钥?

时间:2020-06-13 17:40:19

标签: php

我有一个字符串,我将其解析为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++;
}

我该怎么办?

我试图用一个函数包装它,但是它返回了无限循环。

谢谢

1 个答案:

答案 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}}。

如果您需要考虑类似情况,则此解决方案可能过于简单。