Еще одна полезность на заметку… Вот бывает вы получаете N количество записей и надо это набить в колонки. Здесь есть как минимум два варианта и есть в результатах тонкости. Заодно мы и рассмотрим применение кратности для выполнения этой задачи.
$arr = array('Адлер', 'Александров', 'Анапа', 'Белгород', 'Галич', 'Гатчина', 'Елец', 'Дубна', 'Киров');
$cols = 2;
$count = count($arr);
$i = 1;
$output = "<ul>";
foreach($arr as $a){
$output .= "\n\t<li>{$a}</li>";
if($i%$cols == '0' AND $i < $count){
$output .= "\n</ul>\n<ul>";
}
$i++;
}
$output .= "\n</ul>";
print $output;
<ul>
<li>Адлер</li>
<li>Александров</li>
</ul>
<ul>
<li>Анапа</li>
<li>Белгород</li>
</ul>
<ul>
<li>Галич</li>
<li>Гатчина</li>
</ul>
<ul>
<li>Елец</li>
<li>Дубна</li>
</ul>
<ul>
<li>Киров</li>
</ul>
Здесь самое главное — это проверка кратности индекса текущего элемента $i и количества колонок $cols. Если поменяем кол-во колонок в переменной $cols, то получим и соответствующее количество колонок на выходе. В итоге мы получили по два города на строчку. Но здесь есть момент — города по порядку расположены горизонтально, что не есть удобно, так как удобней, когда порядок идет вертикально по колонкам. Посмотрим второй пример:
$arr = array('Адлер', 'Александров', 'Анапа', 'Белгород', 'Галич', 'Гатчина', 'Елец', 'Дубна', 'Киров');
$cols = 2;
$count = count($arr);
$i = 1;
$output = "<ul>";
foreach($arr as $a){
$output .= "\n\t<li>{$a}</li>";
if($i < $count AND $i%ceil($count/$cols) == '0'){
$output .= "\n</ul>\n<ul>";
}
$i++;
}
$output .= "\n</ul>";
print $output;
Вот здесь уже результат такой:
<ul>
<li>Адлер</li>
<li>Александров</li>
<li>Анапа</li>
<li>Белгород</li>
<li>Галич</li>
</ul>
<ul>
<li>Гатчина</li>
<li>Елец</li>
<li>Дубна</li>
<li>Киров</li>
</ul>
То есть у нас здесь четко две колоночки, в каждой из которых записей примерно поровну. (Визуальное оформление уже само собой на совести CSS).