В настоящее время у меня есть список (<ul>) людей, которые я разделил на два столбца. Но, закончив код для этого, я кивнул, задаваясь вопросом, есть ли более эффективный или чистый способ сделать то же самое.
echo "<table class='area_list'><tr>"; // Loop users within areas, divided up in 2 columns $count = count($areaArray); for($i=0 ; $i<$count ; $i++) { $uid = $areaArray[$i]; // get the modulus value + ceil for uneven numbers $rowCalc = ($i+1) % ceil($count/2); if ($rowCalc == 1) echo "<td><ul>"; // OUTPUT the actual list item echo "<li>{$users[$uid]->profile_lastname}</li>"; if ($rowCalc == 0 && $i!=0) echo "</ul></td>"; } echo "</tr></table>";
Не знаю, понимает ли это то, что имел в виду @llia, но как это сделать:
//declare how many columns are needed $cols=2; //iterate over each row of entries (down the column) for ($i=0;i<$count;i+=cols){ echo "<td><ul>"; //entry loop (across the row) for($j=0;j<$cols;j++){ //whose line is it anyway? $uid = $areaArray[$i+$j]; echo "<li>{$users[$uid]->profile_lastname}</li>"; } //end entry loop echo "</ul></td>"; } //end row loop
Таким образом, вы можете установить столько столбцов, которые вам нравятся.
Простите меня, если я что-то пропустил, так как я жду, когда чайник закипит, чтобы получить мой очень необходимый кофе!
Это должно делать то, что вы хотите. Я в значительной степени просто объединил два других ответа так +1 для всех.
$cols=3; $user_count = count($users); echo "<table class='area_list'><tr>"; // Column loop for($i=0;$i<$cols;$i++){ echo "<td><ul>"; // user loop for($j=$i;$j<$user_count;$j+=$cols){ echo "<li>{$users[$j]->profile_lastname}</li>"; } echo "</ul></td>"; } echo "</tr></table>";
Вы можете просто выполнить цикл дважды, один раз для каждого столбца. Начните с 0 в первом столбце и на 1 во втором. Увеличение на два.
Изменить: Чтобы сделать его еще лучше, поместите столбцы в цикл:
$cols = 3; echo '<table><tr>'; // column loop for ($c = 1; $c <= $cols; $c++) { echo '<td><ul>'; // item loop for ($i = 0; $i < count($areaArray); $i += $c) { echo '<li>...</li>'; } echo '</ul></td>'; } echo '</tr></table>';
$cols = 3; $chunkSize = ceil(count($areaArray) / $cols); echo $chunkSize * $cols; foreach (array_chunk($areaArray, $chunkSize) as $items) : ?> <td> <ul> <?php foreach ($items as $item) : ?> <li><?php echo $item ?></li> <?php endforeach; ?> </ul> </td> <?php endforeach; ?>