I have a list of URL strings:
'page1',
'page1/url1',
'page1/url2/suburl1',
'page2/url3',
'page2/url4/suburl2',
'page2/url4/suburl3'
And I want to convert it to a nested URL according to their structure:
Array
(
[page1] => Array
(
[0] => "url1"
[1] => Array
(
[url2] => Array
(
[0] => "suburl1"
)
)
)
[page2] => Array
(
[0] => "url3"
[1] => Array
(
[url4] => Array
(
[0] => "suburl2"
[1] => "suburl3"
)
)
)
)
I've seen this question: how to merge multiple url/path into multidimensional array?
But it doesn't work in my case where the URLs are not the same dimension and also when I have URL like page1 and not /page1 it breaks it and create a string key and also an array key with that URL:
$urls = [
'page1',
'page1/url1',
'page1/url2/suburl1',
'page2/url3',
'page2/url4/suburl2',
'page2/url4/suburl3'
];
$paths = [];
foreach ($urls as $url) {
$path_parts = explode('/', $url);
$path = [array_pop($path_parts)];
foreach (array_reverse($path_parts) as $path_part) {
$path = [$path_part => $path];
}
$paths[] = $path;
}
$tree = call_user_func_array('array_merge_recursive', $paths);
print_r($tree);
(Demo: https://onlinephp.io/c/02a524)
You can see for example:
Array
(
[0] => page1
[page1] => Array