Проблема в том, что вы используете isset(foo)
, что затрудняет помещение переменных в массив. Если будет проверена длина переменной, используйте:
$parts = array_reverse(array($one,$two,$three,$four));
foreach ($parts as $i => $value)
if(strlen($value)==0)
unset($array[$i]);
$final = join('/',parts);
if(isset($navi[$final])) echo "/content/" . $final . ".php";
else echo "\nerror\n\n\n";
Но для этого потребуется изменить конструкцию $ navi, чтобы она выглядела как
$navi['foo/bar/baz'] = "someval";
вместо
$navi['foo']['bar']['baz'] = "someval";
, потому что мы будем использовать сцепленную строку $final
для поиска в $ isset. В противном случае единственный маршрут - это динамически генерируемый php, что ужасно.
Не могли бы вы структурировать ваши данные по-другому? Циклы для измерений массива не очень приятны, тогда как приведенный выше плоский список гораздо проще выполнить.