$page_path — url (например, /category/subcategory/page.html)
$parent_id — id родительской категории
$_MAIN['categories'] — все категории (результать mysql запроса)
$_MAIN['pages'] — все страницы (результать mysql запроса)
function page_id($page_path, $parent_id = 0)
{
global $_MAIN;
$page_copy = explode('/', $page_path); // парсим урл
$parent_id = intval($parent_id);
foreach ($page_copy as $segment)
{
if (!preg_match('#\.html$#i', $segment)) // если вызывается не страница
{
foreach ($_MAIN['categories'] as $category)
{
if (($category['parent_id'] == $parent_id) and ($category['category_name'] == $segment)) // если id категории равно id родителя и имя категории равно сегменту урл
{
page_id($page_path, $category['category_id']); // рекурсия
$_MAIN['page']['id'] = $category['index_id']; // результат — id страницы
}
}
}
else
{
$segment = preg_replace('#\.html$#i', '', $segment);
foreach ($_MAIN['pages'] as $page)
{
if (($page['category_id'] == $parent_id) and ($page['page_name'] == $segment))
{
$_MAIN['page']['id'] = $page['page_id'];
}
}
}
}
}
Сейчас функция использует массив ВСЕХ страниц из MySQL. Так как страниц может быть много, то массив может занимать много памяти. Можно ли как то оптимизировать функцию? Есть идея по выносу имен категорий и страниц в отдельную таблицу.