使用模数列的清洁方法

时间:2010-03-23 21:21:23

标签: php optimization

我目前有一个列表(< ul>),我已将其分为两列。但在完成代码之后,我想知道是否有更有效或更干净的方法来做同样的事情。

echo "<table class='area_list'><tr>";
// Loop users within areas, divided up in 2 columns
$count = count($areaArray);
for($i=0 ; $i<$count ; $i++) {
  $uid = $areaArray[$i];
  // get the modulus value + ceil for uneven numbers
  $rowCalc = ($i+1) % ceil($count/2);

  if ($rowCalc == 1) echo "<td><ul>";

  // OUTPUT the actual list item
  echo "<li>{$users[$uid]->profile_lastname}</li>";

  if ($rowCalc == 0 && $i!=0) echo "</ul></td>";
}
echo "</tr></table>";

4 个答案:

答案 0 :(得分:4)

不知道这是否是@llia的意思,但是像这样的for循环怎么样:

//declare how many columns are needed
$cols=2;

//iterate over each row of entries (down the column)
for ($i=0;i<$count;i+=cols){ 

     echo "<td><ul>";

     //entry loop (across the row)
     for($j=0;j<$cols;j++){ 

           //whose line is it anyway?
           $uid = $areaArray[$i+$j];

           echo "<li>{$users[$uid]->profile_lastname}</li>";
     }
     //end entry loop

     echo "</ul></td>";
}
//end row loop

这样,你可以设置很多你喜欢的列。

原谅我,如果我错过了什么,因为我正在等待水壶煮沸以获得我急需的咖啡因!

答案 1 :(得分:1)

您可以循环两次,每列一次。从第一列的0开始,在第二列的1开始。增加两倍。

编辑:为了使它更好,将列本身放在循环中:

$cols = 3;

echo '<table><tr>';

// column loop
for ($c = 1; $c <= $cols; $c++) {
  echo '<td><ul>';

  // item loop
  for ($i = 0; $i < count($areaArray); $i += $c) {
     echo '<li>...</li>';
  }

  echo '</ul></td>';
}

echo '</tr></table>';

答案 2 :(得分:1)

这应该做你想要的。我几乎只是结合了其他两个答案,所以每个人都有+1。

$cols=3;
$user_count = count($users);

echo "<table class='area_list'><tr>";

// Column loop
for($i=0;$i<$cols;$i++){
    echo "<td><ul>";

    // user loop
    for($j=$i;$j<$user_count;$j+=$cols){
        echo "<li>{$users[$j]->profile_lastname}</li>";
    }
    echo "</ul></td>";
}
echo "</tr></table>";

答案 3 :(得分:1)

$cols = 3;
$chunkSize = ceil(count($areaArray) / $cols);
echo $chunkSize * $cols;
foreach (array_chunk($areaArray, $chunkSize) as $items) : ?>
 <td>
  <ul>
<?php foreach ($items as $item) : ?>
   <li><?php echo $item ?></li>
<?php endforeach; ?>
  </ul>
 </td>
<?php endforeach; ?>