我有一个看起来像这样的数组:
array:2 [
"test1_test2_test3" => "result"
"category_slug" => "the_slug"
]
我需要做的是将其转换为多维数组,如下所示:
array:2 [
"test1" => [
"test2" => [
"test3" => "result"
]
]
"category" => [
"slug" => "the_slug"
]
]
我知道我可以explode
获取一个数组,但我不确定如何从最终得到最终结果。
编辑该数组最初看起来像是因为它是从请求参数中提取的:http://url.com?test1.test2.test3=result&category.slug=the_slug
而Laravel会自动将其转换为数组。
答案 0 :(得分:0)
我的方法是反转数组,然后遍历键并嵌套它们。
下面的代码可以解决问题。
Field
答案 1 :(得分:0)
一种方法:
$arr = array("test1_test2_test3" => "result", "category_slug" => "the_slug");
$res = array();
foreach($arr as $k=>$v) {
$t = explode("_", $k);
$new_arr = array();
$tmp = $v;
for($i=count($t)-1; $i > 0; $i--) {
$new_arr[$t[$i]] = $tmp;
$tmp = $new_arr;
$new_arr = array();
}
$res[$t[0]] = $tmp;
}
print_r($res);
结果:
Array
(
[test1] => Array
(
[test2] => Array
(
[test3] => result
)
)
[category] => Array
(
[slug] => the_slug
)
)
答案 2 :(得分:0)
通过Laravel文档,我发现了一个帮助器array_set
,这意味着为了将密钥更改为多维数组,我可以更改密钥以使用带有str_replace
的点表示法然后使用帮助程序转换它:
$array = [
"test1_test2_test3" => "result"
"category_slug" => "the_slug"
]
$new_array = []
foreach($array as $key => $value)
{
$key = str_replace('_', '.', $key);
array_set($new_array, $key, $value);
}
结果:
array:2 [
"test1" => [
"test2" => [
"test3" => "result"
]
]
"category" => [
"slug" => "the_slug"
]
]