<?php
const URLS = [
"http://site.com/",
"http://site.com/save",
"http://site.com/save/results",
"http://site.com/save/results/path",
"http://site.com/path/save/results",
"http://site.com/save/path",
"http://site.com/path/results",
"http://site.com/Crawler4",
"http://site.com/Crawler",
];
$siteStructure = [];
foreach (URLS as $url)
{
// Parse the URL into components
['scheme' => $scheme, 'host' => $host, 'path' => $path] = parse_url($url);
// build the slug for the top-level element
$realm = $scheme . '://' . $host;
// create the top levekl element and get a reference to it
$siteStructure[$realm] = $siteStructure[$realm] ?? [];
$current = &$siteStructure[$realm];
// parse the path into parts
$pathEls = preg_split('/[^a-zA-Z0-9]+/', $path, 0, PREG_SPLIT_NO_EMPTY);
foreach ($pathEls as $el)
{
// for each part, make sure the child array exists and overwrite the reference to the child
$current[$el] = $current[$el] ?? [];
$current = &$current[$el];
}
// delete the reference at the end of the loop to prevent accidents
unset($current);
}
var_dump($siteStructure);