我有以下方法,我用它来递归构建我的php数组,然后将它们转换为json字符串:
protected function stringKeyToMultArray(&$newarr, $keys, $value) {
if(count($keys) > 1) {
$key = array_shift($keys);
if(!isset($newarr[$key]) || !is_array($newarr[$key])) {
$newarr[$key] = array();
}
$this->stringKeyToMultArray($newarr[$key], $keys, $value);
} else {
$newarr[array_shift($keys)] = $value;
}
}
编辑:这就是它被称为:
$path_arr = [];
foreach ($product_row['fields'] as $field) {
//gets the path for this field like pathto/field
$strpath = $tags[$field['id']]['str_path'];
$paths = explode('/', $strpath);
$this->stringKeyToMultArray($path_arr, $paths, $field['value']);
}
然后在此之后简单地将其json_encode为json_encode($path_arr)结束编辑问题是格式如果达到第二级,应该使用数组来包装部分。所以我现在得到的是:
{
"product_title":"Test Title",
"ASIN":"1234567890",
"codes":{
"type":"UPC",
"number":"030878249270"
},
"quantity":"1"
}
我需要的是以下内容:
{
"product_title":"Test Title",
"ASIN":"1234567890",
"codes":[
{
"type":"UPC",
"number":"030878249270"
}
],
"quantity":"1"
}
关于如何使用递归方法做到这一点的任何想法?
鉴于问题和评论中所述的(非常)具体条件:
protected function stringKeyToMultArray(&$newarr, $keys, $value) {
if (count($keys) > 1) {
$key = array_shift($keys);
if ( !isset($newarr[$key]) || !is_array($newarr[$key])) {
$newarr[$key] = array(array());
}
$this->stringKeyToMultArray($newarr[$key][0], $keys, $value);
} else {
$newarr[array_shift($keys)] = $value;
}
}
见 https://3v4l.org/4Hpek