在 foreach() 循环内唯一地显示元素
Posted
技术标签:
【中文标题】在 foreach() 循环内唯一地显示元素【英文标题】:Inside foreach() loop display elements uniquely 【发布时间】:2018-01-04 16:34:32 【问题描述】:这是我的数据库结构。
表格:成员资格
mbs_id | mbs_color | mbs_name
1 | red | Standard
2 | yellow | Premium
3 | green | Elite
4 | blue | Ultimate
表格:广告
ad_id | ad_memberships
1 | 1,2
2 | 1,2,3
3 | 1,3
4 | 2,3
我有一个代码,它根据ad_memberships
中的值显示每个循环的颜色。这意味着如果ad_membership
包含 1,2,那么它会在方形框中并排显示红色和黄色。使用以下代码可以很好地完成这项工作。但是我现在想要做的是,当我放置这些框时,它会显示成员名称,如title
属性。对于会员名称,我的意思是mbs_name
。例如,如果悬停红色框会显示Standard
,如果悬停黄色框会显示Premium
等。这些彩色框从<span class="membership-indicator">
显示。这里应该添加什么?
代码:
<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) AS colors 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())
$mbs_colors = explode(',', $a['colors']);
?>
<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 $a['ad_id']; ?>" target="_blank"><?php echo $a['ad_title']; ?></a>
</div>
<div class="ad-footer-two">
<?php foreach($mbs_colors as $color) ?>
<span class="membership-indicator" style="background: <?php echo $color; ?>; margin-top: 4px" title="<?php echo $a['mbs_name']; ?>"></span>
<?php ?>
</div>
</div>
</div>
<?php ?>
</div>
【问题讨论】:
【参考方案1】:首先,你可以像获取颜色一样获取mbs_name
数据:
GROUP_CONCAT(memberships.mbs_name) AS names
在您的 while
循环中,您可以再次等价地分解它们:
$mbs_names = explode(',', $a['names']);
然后你可以将两个数组加在一起:
$membershipData = array_map(function($color, $name)
return (object)['color' => $color, 'name' => $name];
, $mbs_colors, $mbs_names);
最后你可以遍历这个新创建的数组并打印出数据:
<?php foreach($membershipData as $membership) ?>
<span class="membership-indicator" style="background: <?php echo $membership->color; ?>; margin-top: 4px" title="<?php echo $membership->name; ?>"></span>
<?php ?>
【讨论】:
完美..正是我想要的:)以上是关于在 foreach() 循环内唯一地显示元素的主要内容,如果未能解决你的问题,请参考以下文章
在 PHP 中使用 foreach 循环时查找数组的最后一个元素
SwiftUI List 和 For Each 循环与空白元素