PHP如果一个变量有重复只显示第一个实例?
Posted
技术标签:
【中文标题】PHP如果一个变量有重复只显示第一个实例?【英文标题】:PHP if a variable has duplicate only display first instance? 【发布时间】:2013-10-05 00:23:12 【问题描述】:我创建了一个包含这些行和值的 mysql 表:
category | item_name
=======================
Dinner | Lobster
Dinner | Pizza
Lunch | Sandwich
Lunch | Soup
Lunch | Salad
-------------------------
然后我查询数据库,结果放在一个数组“$menu_selected”中。 我遍历“$menu_selected”以显示结果。
foreach($menu_selected as $m):
echo $category = $m->category . "<br>";
echo $item_name = $m->item_name . "<br><br>";
endforeach;
输出:
Dinner
Lobster
Dinner
Pizza
Lunch
Sandwich
Lunch
Soup
Lunch
Salad
如何过滤 php 中的类别,使其不只回显每个类别的第一个类别实例?类别行值并不总是“晚餐”或“午餐”,我希望能够回显类别而不将其与 if($category =='Dinner') 之类的常量进行比较。我花了一个星期研究,但无法弄清楚。任何人的帮助将不胜感激。
我希望输出如下所示:
**Dinner**
Lobster
Pizza
Sandwich
**Lunch**
Sandwich
Soup
Salad
【问题讨论】:
【参考方案1】:确保您在查询中按类别排序。然后只需在循环外部添加一个 $category 变量,如果该变量已更改,则输出您的标题。
$category = '';
foreach($menu_selected as $m)
if ($m->category != $category)
echo "**$m->category** <br>";
$category = $m->category;
echo $m->category . "<br>";
echo $m->item_name . "<br><br>";
【讨论】:
【参考方案2】:$cat_item_array = ARRAY();
foreach($menu_selected as $m)
if (!isset($cat_item_array[$m->category]))
$cat_item_array[$m->category] = $m->item_name;
echo "found new category: ".$m->category . " (Added item: ".$m->item_name.")<br>";
continue;
$cat_item_array[$m->category] = $m->item_name;
echo "Added item ".$m->item_name." to category ".$m->category.".<br><br>";
print '<pre>'; var_dump($cat_item_array); print '</pre>';
【讨论】:
最好将它与 gview 给出的答案结合起来......意味着首先优化你的 SQL。【参考方案3】:只需使用 2 个 foreach 方法。第一个用于类别 第二个用于项目
foreach($menu_selected as $m1):
echo $category = $m1->category . "<br>";
foreach($menu_selected as $m):
echo $item_name = $m->item_name . "<br><br>";
if ($m->category != $m1->category)
break;
endforeach;
endforeach;
【讨论】:
以上是关于PHP如果一个变量有重复只显示第一个实例?的主要内容,如果未能解决你的问题,请参考以下文章