Разбейте массив PHP на 3 столбца - PullRequest
10 голосов
/ 02 января 2012

Я пытаюсь разбить массив PHP на 3 столбца (это должны быть столбцы, а не строки), чтобы он выглядел примерно так:

Item 1     Item 2     Item 3
Item 4     Item 5     Item 6
Item 7     Item 8     Item 9
Item 10................

Лучший подход, который я могу придумать, состоит в том, чтобы разбить основной массив на 3 массива, по 1 для каждого столбца, хотя я не могу выработать лучший подход для этого - более конкретно, критерии, которые я мог бы использовать для генерации 3. массивы.

Ответы [ 7 ]

8 голосов
/ 02 января 2012

Я бы использовал это:

$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>
3 голосов
/ 02 января 2012

Вы можете использовать array_slice для извлечения части массива, поэтому:

$newArray = array();

for($i = 0; $i < count($oldArray); $i += 3) {
    $newArray[] = array_slice($oldArray, $i, 3);
}

Редактировать: Как указывает @deceze, это делает то же самое, что и array_chunk. (Я знал, что в PHP будет что-то встроенное.) Так что используйте это вместо этого!

1 голос
/ 30 сентября 2016
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>';
1 голос
/ 09 ноября 2014

Используя 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>";
}
1 голос
/ 02 января 2012

Просто подумав об этом, это должно достичь того, что я хочу - будь то самый быстрый метод, хотя я не уверен:

$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;
    }
}

РЕДАКТИРОВАТЬ: То же, что и выше, но с использованием одного цикла 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;
    }
}
1 голос
/ 02 января 2012

При рассмотрении темы вашего вопроса первое впечатление - это «Колонка», и я думаю, что вам нужно сосредоточиться на визуальных аспектах. «Как отобразить ваш массив в виде трех столбцов» Может быть, моя идея не так. Но я думаю, ты этого хотел. Просто проверьте следующий пример, если моя мысль верна.

<!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>
1 голос
/ 02 января 2012
$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.

...