PHP写入任何深层次的json文件

时间:2018-01-18 13:39:01

标签: php json recursion

我想用php添加数据到json文件。

json文件如下所示:

[
    {
        "content":"this is level 0 message 0",
        "messages": [
            {
                "content":"this is level 1 message 0",
                "messages": []
            },
            {
                "content":"this is level 1 message 1",
                "messages": []
            }
        ]
    },
    {
         "content":"this is level 0 message 1",
         "messages": []
    }
]

可以是任何深层次(消息中消息中的消息......)。

在我的post.php文件中,我获取了新消息的内容(来自ajax)和一个数组,其中包含key = deep level和value = message number的路径。例如,对于“1级消息1”中的新消息:

Array (
    [0] => 0
    [1] => 1
)

我尝试制作递归函数:

function dig($path,$level,$obj) {
    if ($level < count($path)-1) {
        echo 'has children';
        dig($path,$level+1,$obj[$path[$level]]['messages'])
    } else {
        echo 'has no children';
        array_push($obj[$path[$level]]['messages'], $_POST);
        $dataJsonNew = json_encode($obj, JSON_PRETTY_PRINT);
        file_put_contents($dataFile, $dataJsonNew);
}
dig($path,0,$dataJson)

它适用于第一级但不深入,因为我在迭代时从root中失去了路径。

所以基本上如何获得

array_push($obj[0]['messages'][1]['messages'], $_POST);

来自

Array (
    [0] => 0
    [1] => 1
)

(或更大的数组)

如何修复我的功能? 还有其他解决方案吗?

编辑:

或者是否可以评估这种$ str?

$str = "print_r($dataJson";
foreach ($path as $k) {
    $str .= "[".$k."]" . "['messages']";
}
$str .= ")";

谢谢!

1 个答案:

答案 0 :(得分:0)

尝试定义此功能:

$obj[0]['messages'][1]['messages']

然后得到get_messages([0,1], $obj); 的等价物:

$obj

请注意,您所谓的function readyFunction() { if (window.DeviceOrientationEvent) {window.addEventListener('orientationchange', function () { location.reload(); }, false); } } 实际上是一个数组。