<?php
$combinedArray = array("apple","banana","watermelon","lemon","orange","mango");
$num_cols = 3;
$i = 0;
foreach ($combinedArray as $r ){
/*** use modulo to check if the row should end ***/
echo $i++%$num_cols==0 ? '<div style="clear:both;"></div>' : '';
/*** output the array item ***/
?>
<div style="float:left; width:33%;">
<?php
echo $r;
?>
</div>
<?php
}
?>
<div style="clear:both;"></div>
上面的代码将打印出如下数组:
苹果---香蕉---西瓜
柠檬---橙色---芒果
但是,我需要这样:
苹果---西瓜---橙色
香蕉---柠檬---芒果
你知道怎么转换吗?基本上,数组中的每个值都需要放在上面的一个下面,但它必须基于3列的相同结构,并且每列/行也有相同数量的水果(除非有7个水果,否则会有3列在一列中,2列在其他列中。
对不起,我知道这让人困惑lol
答案 0 :(得分:1)
你为什么不做你想做的事情?我的意思是在列中显示它们而不是行?
$combinedArray = array("apple","banana","watermelon","lemon","orange","mango");
$num_cols = 3;
$rowCount = ceil(count($combinedArray)/$num_cols);
$i = 1; // in order the modulus to work correctly
?>
<div style="float: left; width:33%"> <!-- this is the first column -->
foreach ($combinedArray as $r ){
?>
<div> <!-- just a div containing $r -->
<?php
echo $r;
?>
</div>
<?php
// this is where the magic happens
// check if we have enough rows and start another column
if ($i % $rowCount == 0) {
?>
</div> <!-- close the previous column and start a new one -->
<div style="float: left; width:33%"> <!-- this is the new column -->
<?php
}
$i++;
}
?>
</div> <!-- closing the last open column -->
<div style="clear:both;"></div>
这应该只做你想要的工作。如果你只想使用没有div的表格,马文的答案会更好。
答案 1 :(得分:1)
感谢大家的帮助......我意识到了更好的方法。简单来说,我有3列浮动在彼此旁边。在每一列中,我都会在其中添加一个项目列表,并在每行达到最大项目时停止。
工作代码:
<div style="float:left; width:33%;">
<?php
$combinedArraySizeOf = sizeof($combinedArray);
$num_cols = 3;
$iPerRow = $combinedArraySizeOf / $num_cols;
for ($i=0; $i!=$combinedArraySizeOf; $i++){
if ($i % $iPerRow == 0){
echo '</div><div style="float:left; width:33%;">';
}
echo $combinedArray[$i]."<br />";
}
?>
</div>
<div style='clear:both;'></div>
如果有必要,不要忘记在最后清除它们:P
答案 2 :(得分:0)
$combinedArray = array("apple","banana","watermelon","lemon","orange","mango");
$step = 2;
$i = 0;
$new_array = array();
foreach ($combinedArray as $r ){
$remainder = ($i % $step);
$new_array[$remainder][] = $r;
$i++;
}
foreach($new_array as $array)
{
echo implode(' --- ', $array)."<br>";
}
答案 3 :(得分:0)
这会有用吗?
$combinedArray = array("apple","banana","watermelon","lemon","orange","mango");
$num_cols = 3;
$rows = ceil(count($combinedArray)/$num_cols);
for($i = 0; $i < $rows; $i++){
for($j = 0; $j < $num_cols; $j++){
echo $combinedArray[(($i+$j) * $rows)-$i];
}
echo "<br />";
}
这还需要检查在项目数量不能被列数精确整除的情况下存在的值,您可以通过以下更改来实现:
$combinedArray = array("apple","banana","watermelon","lemon","orange","mango");
$num_cols = 3;
$rows = ceil(count($combinedArray)/$num_cols);
for($i = 0; $i < $rows; $i++){
for($j = 0; $j < $num_cols; $j++){
$cell = (($i+$j) * $rows)-$i;
if($cell > count($combinedArray)) break;
echo $combinedArray[$cell];
}
echo "<br />";
}
答案 4 :(得分:0)
如果这个顺序是您理想的顺序,但它在所有浏览器中都有效并不重要,也许您应该查看coloumn layout(仍然是非常实验性的css3草案)。如果您对每个coloumn中的元素使用dispay内联块,则您将当前订单作为后备。
您也可以使用表格进行布局并使用类似于此的for循环(伪PHP代码,自从我编写任何php以来已经有一段时间了):
maxHeight = Math.ceil(array.length / 3) // meaning length=6 will give 3,
// length=7 will give 4
$x = -1; // horizontal index
for(i = 0; i < array.length(); i++){
$y = i % maxHeight; // vertical index
if($y == 0){
$x++;
}
addToTable($x,$y, array[i]);
}