首页 > 解决方案 > 如何生成对象键?

问题描述

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

我该怎么做?

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

谢谢

标签: php

解决方案


您可以迭代,$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 对象的内容,例如仅包含and"me-name-middle"时。namefirstlast

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


推荐阅读