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++;
}
我该怎么做?
我试图用一个函数包装它,但它返回了一个无限循环。
谢谢
解决方案
您可以迭代,$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"
时。name
first
last
如果您需要考虑此类情况,则此解决方案可能过于简单化。
推荐阅读
- android - 如何从后台线程在 UI 线程上运行并等待结果?
- angular - 路由功能模块与路由功能模块
- elixir - 如何使用 phoenix stack 运行 Elixir 文件
- asp.net - 如何创建第二个 aspnetusers 表
- javascript - 如何用 JSDoc 记录扩展另一个类的类类型的参数?
- javascript - 带有续集的Nodejs返回错误运行更新
- java - Spring Data JPA - 具有复合键的实体,其中一列是与另一列相关的内部序列
- vue.js - V-chip-group 值未定义
- excel - 在 Excel 的 Power Query 中将日期转换为序列号
- ios - Swift 5 程序化 segue 没有触发