PHP显示逗号分隔GROUP_CONCAT值

时间:2018-01-03 16:22:12

标签: php foreach

这个问题是参考我在此发布的上一个问题PHP display results equivalent to comma separated values in the database。 我几乎解决了这个问题。现在我被困在其他地方,如果解决了我的问题将被解决。

问题是:
请先看一下这段代码

<div class="ads-container">
  <?php
    $cat = $pdo->prepare("SELECT * FROM ads_category");
    $cat-> execute();

    $i = 0;
    while($s = $cat->fetch()){
      $ads = $pdo->prepare("SELECT *, GROUP_CONCAT(memberships.mbs_color) FROM advertisements
                            INNER JOIN memberships ON FIND_IN_SET(memberships.mbs_id, advertisements.ad_memberships)
                            LEFT JOIN ads_category ON advertisements.ad_category = ads_category.ac_id
                            WHERE ad_credits >= ac_credits AND ad_category = :cat AND ad_status = 'active'
                            GROUP BY advertisements.ad_id");
      $ads-> bindValue(':cat', $s['ac_id']);
      $ads-> execute();

      while($a = $ads->fetch()){ extract($a); 
  ?>
      <div class="" <?php if($i++ != 0){ echo "style='margin-top: 30px'"; } ?>>
        <i class="fa fa-bullhorn" aria-hidden="true"></i> <?php echo $ac_category; ?>
      </div>
      <div class="col-sm-4">
        <div class="adcover">
          <div class="ad-title">
            <a href="surf.php?ad=<?php echo $ad_id; ?>" target="_blank"><?php echo $ad_title; ?></a>
          </div>
          <div class="ad-footer-two"> <?php echo $a['GROUP_CONCAT(memberships.mbs_color)']; // this is giving me the values comma separated perfectly ?>
            <span class="membership-indicator" style="background: <?php echo $mbs_color; ?>; margin-top: 4px; margin-left: 5px"></span>
          </div>
        </div>
      </div>
  <?php } } ?>
</div>

现在的问题是当我回显<?php echo $a['GROUP_CONCAT(memberships.mbs_color)']; ?>时,我完全得到了逗号分隔的颜色值。但我希望将其显示为<span class="membership-incdicator"></span>中的颜色,而不是https://prnt.sc/hvj91s中的颜色。那么,我该怎么做呢?我必须在这里使用foreach()功能吗?如果是,那么请告诉我如何编写该代码。如果没有,那么请告诉我如何实现这一目标。

1 个答案:

答案 0 :(得分:2)

整个事情看起来非常混乱,但爆炸列表并循环:

$mbs_colors = explode(',', $a['GROUP_CONCAT(memberships.mbs_color)']);

foreach($mbs_colors as $color) {
    echo '<span class="membership-indicator" style="background: ' . $color . '; margin-top: 4px; margin-left: 5px"></span>';
}

此外,您可以使用别名:SELECT *, GROUP_CONCAT(memberships.mbs_color) AS colors,然后使用:$a['colors']

这确实是个问题;为什么GROUP_CONCAT呢?我不确定,但必须有更好的查询。