我有一个看起来像这样的循环
$folder = [];
$explode = explode("/", $product->folder);
for($i = 0; $i < count($explode); $++)
{
$folder[$i] = 'test'
}
dd($folder);
我在这里尝试做的是根据我从 $explode
获得的内容创建一个嵌套数组,具体取决于有多少文件夹。
所以理想情况下我想要的是这个
[
"folder1" => [
"folder2" => "test"
]
]
它会继续嵌套,所以如果我的 $product->folder
看起来像这样 cat1/cat2/cat3
那么数组看起来像这样
[
"cat1" => [
"cat2" => [
"cat3" => "product"
]
]
]
答案 0 :(得分:2)
您可以使用 JSON 字符串构建嵌套数组并使用 json_decode
转换为数组
$path = 'cat1/cat2/cat3/cat4/product';
$folders = explode('/',trim($path,'/'));
$last = array_pop($folders);
$folders = str_replace(': []',': "'.$last.'"',
array_reduce(array_reverse($folders),function($carry,$item) {
if($carry) {
return '{"'.$item.'": '.$carry.'}';
}
return '{"'.$item.'": []}';
})
);
$folders = json_decode($folders,true);
// Test
print_r($folders);
结果如下:
Array
(
[cat1] => Array
(
[cat2] => Array
(
[cat3] => Array
(
[cat4] => product
)
)
)
)
和格式化结果
[
"cat1" => [
"cat2" => [
"cat3" => [
"cat4" => "product"
]
]
]
]
答案 1 :(得分:0)
您的问题的简单解决方案
$path = 'cat1/cat2/cat3/product';
$folder = [];
$explode = explode("/", $path);
for($i = 0; $i < count($explode)-1; $i++)
{
if($i+1 >= count($explode)-1)
$folder[$explode[$i]] = $explode[$i+1];
else
$folder[$explode[$i]] = '';
}
print_r($folder) 结果就是这个
Array ( [cat1] => [cat2] => [cat3] => product )
答案 2 :(得分:0)
请尝试以下操作。
// Add product title first.
$folder = end($explode);
// Iterate over categories to create a nested array.
for ($counter = count($explode) - 2; $counter >= 0; $counter--) {
$folder = [$explode[$counter] => $folder];
}