【问题标题】:Using foreach to categorize data使用 foreach 对数据进行分类
【发布时间】:2016-12-23 05:12:58
【问题描述】:

我想知道在回显时是否可以对数据进行分组。

例如,如果我有一张不同手机的表格,并按品牌(即 Apple、Samsung 等)将它们分开,并且我希望数据显示时带有手机品牌的标题,并且下面会显示手机类型。

苹果
苹果手机 4
iphone 4s
苹果手机 5

三星
银河注 2
银河S4

<div id="wrap">
    <table>
        <thead>
            <tr>
                <th><?php echo phones['brand']; ?></th>
                <th>Price</th>
            </tr>
        </thead>

        <tbody>
            <?php foreach($phones as $phone): ?>
                <tr>
                    <td><?php echo $phone['name']); ?>
                        <br>
                    <ul>
                        <li><?php echo $phone['price']); ?></li>
                    </ul>
                    </td>
                    <td>$<?php echo $phone['released']); ?></td>
                </tr>
            <?php endforeach; ?>
        </tbody>
    </table>
</div>

这是我目前所拥有的,抱歉让您久等了。

【问题讨论】:

  • 是的,这是可能的。请向我们展示您在实现所需输出方面的最佳尝试。
  • 你想做什么?你做了什么?
  • 对不起,我编辑了我目前所做的。

标签: php mysql sql database html-table


【解决方案1】:

这是一个非常基本的示例。假设您将手机放在这样的数组中:

$phones = [
    ['Apple',  'iphone 4'],
    ['Apple','iphone 4s'],
    ['Apple','iphone 5'],
    ['Samsung','Galaxy Note 2'],
    ['Samsung','Galaxy S4']
];

您只需在输出品牌时跟踪它们,每当品牌与之前的品牌不同时,为其输出一个标题。

$previous_brand = null;
foreach ($phones as $phone) {
    list($brand, $model) = $phone;
    if ($brand != $previous_brand) {  // check if current brand is different than previous
        echo "<h3>$brand</h3>";
    }
    echo "$model<br>";
    $previous_brand = $brand;     // current brand becomes previous brand for next iteration
}

我将 HTML 保持在最小限度,以免分散工作部分的注意力。显然你可以添加任何你需要的标记。

这种方法的重要之处在于它完全取决于您的数组按品牌排序,所以如果这是来自您的数据库ORDER BY brand,或者是其他来源,@ 987654321@ 先按此顺序获取。

【讨论】:

  • 我的手机在 mySQL 数据库中,一开始我需要做一些不同的事情吗?
  • 可能差别不大。只需选择您要显示的所有手机,但请务必添加ORDER BY brand
  • 感谢您的回答。以表格的形式呼应一下怎么样?
  • 这实际上取决于您希望表格的输出方式。如果您想要为每个品牌创建一个单独的表格,这将不同于您希望它们都在同一个表格中,并由不同格式的行或类似的东西分隔。我希望答案更多地是 PHP 部分如何工作的示例。
【解决方案2】:

先做

$phonesByBrand = [];

foreach ($phones as $phone)
{
  $phonesByBrand[$phone['brand']][] = $phone;
}

现在在你看来,你可以这样做

<?php foreach($phonesByBrand as $brand => $phones): ?>
  <div id="wrap">
    <table>
      <thead>
        <tr>
          <th><?php echo $brand; ?></th>
          <th>Price</th>
        </tr>
      </thead>

      <tbody>
        <?php foreach($phones as $phone): ?>
          <tr>
            <td>
              <?php echo $phone['name']); ?>
              <br>
              <ul>
                <li><?php echo $phone['price']); ?></li>
              </ul>
            </td>
            <td>
              $<?php echo $phone['released']); ?>
            </td>
          </tr>
        <?php endforeach; ?>
      </tbody>
    </table>
  </div>
<?php endforeach; ?>

【讨论】:

    猜你喜欢
    • 2019-12-19
    • 2011-05-07
    • 2018-12-26
    • 1970-01-01
    • 2015-05-26
    • 2017-05-17
    • 1970-01-01
    • 2013-06-21
    • 2019-09-18
    相关资源
    最近更新 更多