【发布时间】:2018-09-23 18:34:25
【问题描述】:
json 格式的示例输入
{
"user":{
"name":"Thomas",
"age":101
},
"shoppingcart":{
"products":{
"p1":"someprod",
"p2":"someprod2"
},
"valuta":"eur",
"coupon":null,
"something":[
"bla1",
"bla2"
]
}
}
预期输出
[
'user.name' => 'Thomas',
'user.age' => 101,
'shoppingcart.products.p1' => 'someprod',
...
'shoppingcart.something.1' => 'bla1'
]
我已经编写了这个函数,但是它产生了错误的输出。除此之外,我想将所述函数重写为Collection 的宏,但我无法理解它。问题还在于当前函数需要一个全局变量来跟踪结果。
public function dotFlattenArray($array, $currentKeyArray = []) {
foreach ($array as $key => $value) {
$explodedKey = preg_split('/[^a-zA-Z]/', $key);
$currentKeyArray[] = end($explodedKey);
if (is_array($value)) {
$this->dotFlattenArray($value, $currentKeyArray);
} else {
$resultArray[implode('.', $currentKeyArray)] = $value;
array_pop($currentKeyArray);
}
}
$this->resultArray += $resultArray;
}
所以我的问题是双重的: 1. 有时函数没有给出正确的结果 2.如何把这个递归函数改写成宏
Collection::macro('dotflatten', function () {
return ....
});
【问题讨论】:
-
您是否查看过关于 SO 的现有答案? stackoverflow.com/q/9546181/4848587 和相关问题
标签: php arrays laravel recursion multidimensional-array