将PHP数组分成3列

将PHP数组分成3列,php,arrays,split,break,Php,Arrays,Split,Break,我试图将一个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个数组。您可以使用这些标准来提取数组的一部分,因此: $newArray = ar

我试图将一个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个数组。

您可以使用这些标准来提取数组的一部分,因此:

$newArray = array();

for($i = 0; $i < count($oldArray); $i += 3) {
    $newArray[] = array_slice($oldArray, $i, 3);
}
$newArray=array();
对于($i=0;$i
编辑:正如@deceze所指出的,这与。(我知道PHP会内置一些东西。)所以改用它吧

我会用这个:

$i = 1
foreach ($array as $value) {
  if ($i % 3 === 0) {
        echo $value . '<br />';
    }
   $i++;
}
$i=1
foreach($array作为$value){
如果($i%3==0){
回显$value.“
”; } $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>

$data=array();
$columns=3;
回声“;
对于($i=0;$i

好了,当您到达列计数时,它只输出另一行。当数据不是3的倍数时,您可能需要添加一些逻辑。

当考虑您的问题主题时,第一印象是“列”,我认为您需要关注视觉方面。“如何将数组显示为三列”可能是我的想法错误。但我想你想要的。只要检查下面的例子,如果我的想法是正确的

<!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;
    }
}
编辑:尽管使用单个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;
    }
}

使用array\u 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>";
}
$rows=array_chunk($yourArray,'3');//3=列计数;
foreach($行作为$列){
回声“;
foreach($columns作为$column){
回显“$column”;
}
回声“;
}
标题('Content-Type:text/plain');
回声';
$colNum=3;
$regNum=10;


对于($i=1;$i)这些列中的项目应如何排序?(应为123456789或147258369)“必须是列,而不是行”…?但您在示例中显示的是数据行…?@deceze想象一下,数据分为三个div,每列一个。这不是行。您显示的数据几乎没有什么区别。常规表视图可以做到。您到底想实现什么?为什么重要的是将数据分为列,而不是三列的行?为什么一个c列需要是一个
?为什么它需要是一个
,为什么你没有在问题中指定它?@deceze它需要是列,而不是行,因为我试图显示的是宽度相等但高度不确定的图像。其思想是它们将按顺序跨行显示,但每个图像之间的间隙垂直方向总是相等的,它们将按列分组。我没有指定它需要在
中这一事实无关紧要,因为我已经解释过它需要在列中,而不是在行中。虽然这显示了如何拆分数组,但它并不能解决OP的问题。@deceze:这是一个答案。但我是;)问题是如何将数组输出为3列,而不是如何将其拆分为3个不同的数组。这是一个关于如何解决问题的建议,而不是一个最优的建议。这不是他想要的。他希望在第一列中显示1、4、7和10。这似乎是一个合理的方法,尽管其想法是数组将包含非连续元素,位于(1,4,7)(2,5,8)和(3,6,9)等位置。这不就是将数组显示为单个列吗?不。这三列使用CSS进行控制。您不需要以编程的方式来做这件事。它只是在无序列表中使用宽度和浮点CSS属性。这同样可以有效地生成行-对于我所需要的,列是唯一有效的方法。这绝对是最好的方法,除非有一些未提及的原因,说明为什么不能使用div和float。关于ad nauseum,已经有人写过这样做的好处,但基本上,它更灵活、可维护、可访问、对SEO更好,而且更重要。@pspahn。你检查过这个了吗?这段代码根据需要生成3列,因为跳转的宽度是300px,列表项的宽度是80px。请参阅我的答案,因为它输出不同列中的数据,正如您所建议的。您不需要将其存储在不同的数组中,只需在每个第n个元素后开始一个新行即可。@TJHeuvel虽然分为三列,但最终不是以行的形式返回结果吗?我需要在三个单独的div中返回结果。不幸的是,array_chunk没有按照问题中指定的顺序分割它们。它将把1,2,3放在第一列。我希望array_chunk有一个从左到右分发它们的选项。对我来说,我必须检查
$I!=0
$i%3==0
一起使用。(使用===不起作用)。但是谢谢你的帮助。这一次节省了很多时间!刚把它安装在一个有大量jQuery支持的站点上,这个解决方案让3000多人(在一个投票页面上)在接下来的一个月里非常高兴。
$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>';