在PHP中以自定义顺序显示数组数据

时间:2017-02-07 23:25:58

标签: php arrays sorting

我想以自定义顺序显示数组数据。

我的示例数组是:

['a' => 'a', 
'b' => 'b', 
'c' => 'c', 
'd' => 'd', 
'e' => 'e', 
'f' => 'f',]

我尝试使用以下代码:

<table>
<tr>
<?php
    $count = 0;
    foreach ($support_others as $other) {
        echo "<td>" . $other ."</td>";
        $count++;
        if ((($count % 3) == 0) && ($count > 0)) {
            echo ("</tr><tr>");
        }
    }
?>
</tr>
</table>

显示订单

a b c

d e f

但我希望显示为:

a d

b e

c f

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

我总是喜欢乱搞带有两个计数器的循环来做这样的事情。看看这个解决方案:

<?php

$support_others = [
  'a' => 'a', 
  'b' => 'b', 
  'c' => 'c', 
  'd' => 'd', 
  'e' => 'e', 
  'f' => 'f'
];

?>

<!DOCTYPE html>
<html>
<head>
  <title></title>
</head>
<body>
  <table>

    <?php

      for ($i = 'a', $j = 'd'; $i < 'd', $j < 'g'; $i++, $j++) {
        echo '<tr>';
        echo '<td>' . $support_others[$i] . '</td>';
        echo '<td>' . $support_others[$j] . '</td>';
        echo '</tr>';
      }

    ?>

  </table>

</body>
</html>

有关更通用的版本,请参阅此处:

<?php

    $columnOneStart = 'a';
    $columnOneEnd = 'c';

    $columnTwoStart = 'd';
    $columnTwoEnd = 'f';

      for ($i = $columnOneStart, $j = $columnTwoStart; $i <= $columnOneEnd, $j <= $columnTwoEnd; $i++, $j++) {
        echo '<tr>';
        echo '<td>' . $support_others[$i] . '</td>';
        echo '<td>' . $support_others[$j] . '</td>';
        echo '</tr>';
      }

?>

答案 1 :(得分:0)

在这种表格显示中,键是每行的元素数,可以计算行数和行的第一个元素。 找到它之后,您只需添加列号即可使“指针”移动到“行”元素。

<?php

$example = [
    'a' => 'a', 
    'b' => 'b', 
    'c' => 'c', 
    'd' => 'd', 
    'e' => 'e', 
    'f' => 'f'
];
$elements = range('a', 'z');

function customTable($elements, $elementsPerRow = 2){
    $elements = array_values($elements);
    $count = count($elements);

    // Prevent empty cols and unallowed (<0 && >n)
    $elementsPerRow = !($elementsPerRow < $count/2 && $elementsPerRow > 0)
        ? (($elementsPerRow > $count) ? $count : 1)
        : $elementsPerRow;
    $rows = ceil($count / $elementsPerRow);

    $table = '<table>';
    for($i = 0; $i < $rows; ++$i){
        $table .= '<tr>';
        for($j = 0; $j < $elementsPerRow; ++$j){
            $table .= '<td>' . (isset($elements[$j*$rows+$i]) ? $elements[$j*$rows+$i] : '') . '</td>';
            // For debug purpose only
            $table .= '<td>' . ($j*$rows+$i) . '</td>';

        }
        $table .= '</tr>';
    }
    return $table . '</table>';
}

?>

<!DOCTYPE HTML>
<html>
<head>
    <style type="text/css">
        table { border-collapse : collapse; margin: 1em;}
        td { border: 1px solid black; padding: 0.5em; }
    </style>
</head>
<body>
<?php
echo customTable($elements, 2);
echo customTable($elements, 3);
echo customTable($elements, 4);
echo customTable($elements, 30);
echo customTable($example, 2);
?>
</body>
</html>