Я пытаюсь разбить массив PHP на 3 столбца (должен быть столбцами, а не строками), поэтому он будет выглядеть примерно так:
Item 1 Item 2 Item 3 Item 4 Item 5 Item 6 Item 7 Item 8 Item 9 Item 10................
Лучший подход, который я могу придумать, состоит в том, чтобы разбить основной массив на 3 массива, по 1 для каждого столбца, хотя я не могу найти оптимальный подход для этого – более конкретно критерии, которые я мог бы использовать для генерации трех массивов.
Я бы использовал это:
$i = 1 foreach ($array as $value) { if ($i % 3 === 0) { echo $value . '<br />'; } $i++; }
Или при использовании таблицы html:
<table> <tr> <?php $i = 0; foreach ($array as $value) { if ($i % 3 === 0) { echo '</tr><tr>'; } echo "<td>" . $value . "</td>"; $i++; } ?> </tr> </table>
Вы можете использовать array_slice
для извлечения раздела массива, поэтому:
$newArray = array(); for($i = 0; $i < count($oldArray); $i += 3) { $newArray[] = array_slice($oldArray, $i, 3); }
Изменить: Как указывает @deceze, это делает то же самое, что и array_chunk
. (Я знал, что PHP будет иметь что-то встроенное.) Поэтому используйте это вместо этого!
При рассмотрении вашей темы вопроса первое впечатление – «Колонка», и я думаю, вам нужно сосредоточиться на визуальных аспектах. «Как отобразить ваш массив как три столбца» Возможно, моя идея ошибочна. Но я думаю, вы этого хотели. Просто проверьте следующий пример, если моя мысль верна.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled Document</title> </head> <?php $arr = array(1,2,3,4,5,6,7,8,9,10); ?> <body> <div style="width:300px"> <ul> <?php foreach($arr as $itm) {?> <li style="list-style:none;float:left;width:80px;"><span style="font-size:36px;"><?php echo $itm;?></span></li> <?php }?> </ul> </div> </body> </html>
Только подумав об этом, это должно достичь того, что я хочу – будь то самый быстрый способ, хотя я не уверен:
$array = (1,2,3,4,5,6,7,8,9....) $column1 = array(); $i = 2; foreach($array as $value) { if ($i++ % 3 == 0) { $column1[] = $value; } } $column2 = array(); $i = 1; foreach($array as $value) { if ($i++ % 3 == 0) { $column2[] = $value; } } $column3 = array(); $i = 0; foreach($array as $value) { if ($i++ % 3 == 0) { $column3[] = $value; } }
EDIT: То же, что и выше, хотя используется один цикл foreach:
$array = (1,2,3,4,5,6,7,8,9....) $column1 = array(); $column2 = array(); $column3 = array(); $i = 2; $j = 1; $k = 0; foreach($array as $value) { if ($i++ % 3 == 0) { $column1[] = $value; } if ($j++ % 3 == 0) { $column2[] = $value; } if ($k++ % 3 == 0) { $column3[] = $value; } }
$data = array(); $columns = 3; echo "<table><tr>"; for($i = 0; $i < count($data); $i++) { if($i%$columns == 0) echo "</tr><tr>"; echo "<td>".$data[i$]."</td>"; } echo "</tr></table>";
Там вы идете, он просто выводит другую строку, когда вы попадаете в счетчик столбцов. Возможно, вам потребуется добавить некоторую логику, когда данные не кратные 3.
Используя array_chunk, вы можете разделить массив:
$rows = array_chunk($yourArray, '3'); // 3 = column count; foreach ($rows as $columns) { echo "<div class='row'>"; foreach ($columns as $column) { echo "<div class='column'>$column</div>"; } echo "</div>"; }
header('Content-Type: text/plain'); echo '<table>'; $colNum = 3; $regNum = 10; for ($i = 1; $i <= $regNum; $i++) { if (($i % $colNum) == 1) { echo "\n\t".'<tr>'; } echo "\n\t\t".'<td>'. $i .'</td>'; if (($i % $colNum) == 0 or $regNum <= $i) { echo "\n\t".'</tr>'; } } echo "\n".'</table>';