Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Динамически создать горизонтальное меню из массива

14K
07 мая 2008 года
Progr\.
72 / / 15.10.2007
Помогите, пожалуйста, создать функцию, которая будет создавать из массива горизонтальное меню. При этом зная фиксированное количество столбцов под это меню.
Вот массив:
Код:
$this->menu = array(
'0' => array(
            'cid' => '0',
            'category_url' => 'new_cat',
            'title' => 'Категория0',
            'description' => 'Описание категории',
            'keywords' => 'Ключевики категории',
            'num_posts' => '10',
            ),
'1' => array(
            'cid' => '1',
            'category_url' => 'new_cat1',
            'title' => 'Категория1',
            'description' => 'Описание категории1',
            'keywords' => 'Ключевики категории1',
            'num_posts' => '5',
            ),
'2' => array(
            'cid' => '2',
            'category_url' => 'new_cat2',
            'title' => 'Категория2',
            'description' => 'Описание категории2',
            'keywords' => 'Ключевики категории2',
            'num_posts' => '5',
            ),
'3' => array(
            'cid' => '3',
            'category_url' => 'new_cat2',
            'title' => 'Категория3',
            'description' => 'Описание категории2',
            'keywords' => 'Ключевики категории2',
            'num_posts' => '5',
            ),
'4' => array(
            'cid' => '4',
            'category_url' => 'new_cat2',
            'title' => 'Категория4',
            'description' => 'Описание категории2',
            'keywords' => 'Ключевики категории2',
            'num_posts' => '5',
            ),
...
);

Вот то, что я смог осмыслить:
 
Код:
$this->cfg['menu_goriz_elem_num'] = 3; // количество столбцов

$all_ni = sizeof($this->menu) / $this->cfg['menu_goriz_elem_num'];
$all_int = intval(sizeof($this->menu) / $this->cfg['menu_goriz_elem_num']);

$all = ($all_ni > $all_int) ? ($all_int + 1) : $all_int; // количество строк в одном полном столбце


Если делать простым foreach-циклом и проверять fmod()-ом $i-тый элемент остаток от деления (равный нулю) $this->cfg['menu_goriz_elem_num'], то получается такая "абра-кадабра":
[HTML]
Категория0 Категория1 Категория2
Категория3 Категория4 Категория5
Категория6 Категория7
[/HTML]

А нужно:
[HTML]
Категория0 Категория3 Категория6
Категория1 Категория4 Категория7
Категория2 Категория5
[/HTML]

Не могу придумать простое решение этой задачки... В голову лезет только создание массива столбцов и заполнения их из foreach-цикла, но я не могу придумать как "гонять" счётчик (или даже два) в этом цикле.

Помогите, пожалуйста. Буду очень благодарен.
4.7K
07 мая 2008 года
bobik02
140 / / 11.09.2007
а как нещет что бы этой "абре-кадабре" сделать natural order ?
353
07 мая 2008 года
Nixus
840 / / 04.01.2007
Код:
$perColumn = 3;
$count = 8;
for($j = 0; $j < $perColumn; $j++)
{
     print "<tr>";
     for($i = $j; $i < $count; $i += $perColumn)
     {
            print "<td>$i</td>";
     }
     print "</tr>\n";
}
14K
07 мая 2008 года
Progr\.
72 / / 15.10.2007
2bobik02:
какой функцией? и как вы это себе представляейте?

2Nixus:
происходит зацикливание
353
08 мая 2008 года
Nixus
840 / / 04.01.2007
Не может быть там зацикливания. Меняем интерпретатор или руки.
14K
08 мая 2008 года
Progr\.
72 / / 15.10.2007
2Nixus, да, действительно работает :-[
Просто тогда свой массив не правильно применил.
Большое спасибо.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог