Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.03.2013, 23:23   #1
kettanaito
Веб-дизайнер
Форумчанин
 
Аватар для kettanaito
 
Регистрация: 11.08.2011
Сообщений: 305
По умолчанию PHP массив и меню

Доброго времени суток.
Помогите пожалуйста разобраться с одной задачей: необходимо построить список меню по массиву. Каждый элемент массива имеет два значения - Название пункта меню и адрес. Делаю так:
Код:
$menu = array(
	"Home page" => "home.php",
	"About us" => "about.php",
	"Categories" => "categories.php",
	"Contacts" => "contacts.php"
	);
И вывожу данные в список следующим образом:
Код:
<?php 
echo "<ul>";
foreach($menu as $menu_item_text => $menu_item_link) {
echo ("<li><a href='$menu_item_link'>$menu_item_text</a></li>");
}
echo "</ul>"; 
?>
В данном примере все работает, но у меня возникла проблема при наличии элементов под-меню (дочерних элементов главного меню), что, как я понимаю, "массив в массиве" и вышеописанной структурой такую ситуацию уже не описать. Никак не получается описать такую структуру массива и метод ее считывания, пробовал как-то так:
Код:
$m = array();
$m[0][0] = "Item";
$m[1][0] = "Item 2";
$m[1][1] = 'Subitem';
$m[1][2] = 'Subitem 2';
Но это неправильно. Получается, нужно создать структуру с элементами меню первого уровня, которые, в свою очередь, могут иметь элементы второго уровня (у которых также будет два значения - название и ссылка). В теории это можно описать циклом вплоть до n-ого количества подуровней. Но на практике не выходит.
Только начал изучать PHP и не могу найти необходимого решения. Очень прошу вашей помощи.
kettanaito вне форума Ответить с цитированием
Старый 06.03.2013, 12:33   #2
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Создай рекурсивную функцию вывода одного списка.
Массив сделай вида
PHP код:
$menu = array(
    array(
        
'title' => 'Home page',
        
'url' => 'home.php'
    
),
    array(
        
'title' => 'Item 1',
        
'url' => '#'
        'items' 
=> array(
            array(
                
'title' => 'Subitem 1',
                
'url' => 'subitem.php'
            
)
        )
    )
); 
Этот массив скармливай своей рекурсивной функции, которая будет печатать каждый элемент из массива и проверять, есть ли у текущего элемента ключ "items". Если есть, то функция будет вызывать сама себя, передавая в качестве параметра массив из ключа "items".
Таким образом можно сделать вывод списков с неограниченной вложенностью.

Очень грубый пример функции
PHP код:
function print_list($list) {
    echo 
'<ul>';
    foreach(
$list as $list_item) {
        echo 
'<li>';
        echo 
"<a href='{$list_item['url']}'>{$list_item['title']}</a>";
        if (
array_key_exists('items'$list_item) && is_array($list_item['items']))
            
print_list($list_item['items']);
        echo 
'</li>';
    }
    echo 
"</ul>";

98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Старый 07.03.2013, 00:28   #3
kettanaito
Веб-дизайнер
Форумчанин
 
Аватар для kettanaito
 
Регистрация: 11.08.2011
Сообщений: 305
По умолчанию

Johnatan, спасибо, это очень помогло мне! Я знал, что в данном случае хорошо использовать рекурсию, но, увы, как описать ее на PHP не знал. Спасибо!
kettanaito вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двухуровневое меню на php и mysql Hardander PHP 1 27.02.2013 16:29
Массив указателей на функции. Создание меню prettynetty Помощь студентам 0 07.03.2012 00:03
Одномерный массив, с меню. L3zh1Y Помощь студентам 1 02.06.2010 21:15
Отображение меню в .php -файлах в разных браузерах griffi HTML и CSS 0 26.01.2010 16:48
Отображение меню в .php -файлах в разных браузерах griffi PHP 2 26.01.2010 16:33