如何使用PHP将项目数组重新排列为3列?

时间:2017-01-20 16:53:43

标签: php html css arrays matrix

我有一系列菜单项,我使用foreach循环打印到屏幕上,形成一个连续的无序列表。由于CSS /设计,它们按此顺序在屏幕上显示3列......

1 2 3
4 5 6
7 8 9

但我需要他们这样显示......

1 4 7
2 5 8
3 6 9

有没有办法可以在不改变HTML结构的情况下仍然在单个for / foreach循环中打印出相同的项目,以便它们按照后一种配置进行排列?

示例代码

<ul>
     <?php  
         foreach($nav_menu as $nav):
             echo "<li><a href='" . $nav->url . "'>" . $nav->title . "</a></li>";
         endforeach;
     ?>
</ul>

3 个答案:

答案 0 :(得分:0)

让你想要你说你想......:)

    $n = 1;$t=0;
for($l=1;$l<=9;++$l){
echo $n; ++$t;  

    if($t==3){
        $n=($n-5); 
        echo '<br>';
        $t=0;
            }
    else{
        $n = $n + 3;
    }


}

答案 1 :(得分:0)

你可以试试这个:

<ul>
     <?php  
         foreach($nav_menu as $index => $nav):
             $array_index = ($index / 3) + 3 * ($index % 3);
             echo "<li><a href='" . $nav_menu[$array_index]->url . "'>" . $nav_menu[$array_index]->title . "</a></li>";
         endforeach;
     ?>
</ul>

答案 2 :(得分:0)

我发布这个更通用的解决方案供将来参考,它基于x01saa的答案,鉴于我提出的问题,这仍然是正确的。

             <?php
                $cols = 3; // this could be any positive integer
                $rows = ceil((float)count($nav_menu)/(float)$cols);

                foreach($nav_menu as $index => $nav):
                    $array_index = ($index / $cols) + $rows * ($index % $cols);
                    echo "<li><a href='" . $nav_menu[$array_index]->url . "'>" . $nav_menu[$array_index]->title . "</a></li>";
                endforeach;
              ?>