使用foreach对数据进行分类

时间:2016-12-22 18:33:17

标签: php mysql sql database html-table

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

例如,如果我有一个不同手机的桌子,并按品牌分开,即苹果,三星等,我希望数据显示带有手机品牌的标题,并且下面会有手机类型。< / p>

苹果
iphone 4
iphone 4s
iphone 5

三星
Galaxy Note 2
Galaxy 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>

这是我到目前为止所做的,对不起等待。

2 个答案:

答案 0 :(得分:0)

这是一个非常基本的例子。假设您将手机放在这样的阵列中:

$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,或者它是其它来源,use one of the various PHP sort functions首先按顺序获取它。

答案 1 :(得分:0)

首先做

$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; ?>