使用 for 循环动态创建嵌套数组

时间:2021-07-12 05:13:15

标签: php laravel

我有一个看起来像这样的循环

$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"
        ]
    ]
]

3 个答案:

答案 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];
}
相关问题