$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";
}
Динамически создать горизонтальное меню из массива
Вот массив:
Код:
$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',
),
...
);
'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; // количество строк в одном полном столбце
$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-цикла, но я не могу придумать как "гонять" счётчик (или даже два) в этом цикле.
Помогите, пожалуйста. Буду очень благодарен.
а как нещет что бы этой "абре-кадабре" сделать natural order ?
какой функцией? и как вы это себе представляейте?
2Nixus:
происходит зацикливание
Не может быть там зацикливания. Меняем интерпретатор или руки.
Просто тогда свой массив не правильно применил.
Большое спасибо.