Php 如何正确列出不同类别的项目?通用编程技术
我有一个包含项目及其类别的数据表。我想把它们列在下面Php 如何正确列出不同类别的项目?通用编程技术,php,loops,foreach,Php,Loops,Foreach,我有一个包含项目及其类别的数据表。我想把它们列在下面 <h3>CATEGORY 1</h3> <ul> <li>item 1</li> <li>item 2</li> <li>item 3</li> </ul> <h3>CATEGORY 2</h3> <ul> <li>item 10</li
<h3>CATEGORY 1</h3>
<ul>
<li>item 1</li>
<li>item 2</li>
<li>item 3</li>
</ul>
<h3>CATEGORY 2</h3>
<ul>
<li>item 10</li>
<li>item 20</li>
<li>item 30</li>
</ul>
我试图使用下面的代码列出数据
$cat = "";
foreach($table as $t):
if($cat !== $t["cat"]):
echo "<h3>".$t["cat"]."</h3>";
echo "<ul>";
endif;
echo "<li>".$t["item"]."</li>";
if($cat !== $t["cat"]):
echo "</ul>"; //this part is problem
$cat = $t["cat"];
endif;
endforeach;
$cat=”“;
foreach($t表格):
如果($cat!==$t[“cat”]):
回显“$t[“cat”]”;
回声“”;
endif;
回声“- ”$t[“项目”]。“
- ”;
如果($cat!==$t[“cat”]):
回声“
”//这部分就是问题所在
$cat=$t[“cat”];
endif;
endforeach;
但我不知道在什么情况下我应该回显
结束标记。我的最终输出应该是:
<h3>Vegetables</h3>
<ul>
<li>mydonose</li>
<li>carrot</li>
<li>tomato</li>
</ul>
<h3>Fruits</h3>
<ul>
<li>apple</li>
<li>banana</li>
<li>orange</li>
</ul>
<h3>Other</h3>
<ul>
<li>mushroom</li>
<li>olive</li>
</ul>
蔬菜
- 蜜糖
- 胡萝卜
- 西红柿
水果
- 苹果
- 香蕉
- 橙色的
其他
- 蘑菇
- 橄榄树
试着这样做:
$arr=array();
foreach($table as $key=>$val){
$arr[$val['cat']][]=$val['item'];
}
foreach($arr as $key=>$val){
echo "<h3>$key</h3>";
if(sizeof($val) > 0){
echo "<ul>";
foreach($val as $key1=>$val1){
echo "<li>$val1</li>";
}
echo "</ul>";
}
}
$arr=array();
foreach($key=>$val的表格){
$arr[$val['cat'][]=$val['item'];
}
foreach($arr作为$key=>$val){
回显“$key”;
如果(sizeof($val)>0){
回声“”;
foreach($valas$key1=>$val1){
回声“- $val1
”;
}
回声“
”;
}
}
试着这样做:
$arr=array();
foreach($table as $key=>$val){
$arr[$val['cat']][]=$val['item'];
}
foreach($arr as $key=>$val){
echo "<h3>$key</h3>";
if(sizeof($val) > 0){
echo "<ul>";
foreach($val as $key1=>$val1){
echo "<li>$val1</li>";
}
echo "</ul>";
}
}
$arr=array();
foreach($key=>$val的表格){
$arr[$val['cat'][]=$val['item'];
}
foreach($arr作为$key=>$val){
回显“$key”;
如果(sizeof($val)>0){
回声“”;
foreach($valas$key1=>$val1){
回声“- $val1
”;
}
回声“
”;
}
}
使用您的代码:
$cat = "";
foreach($table as $t):
if($cat != $t["cat"]):
if(strlen($cat) > 1) {
echo "</ul>";
}
$cat = $t["cat"];
echo "<h3>".$t["cat"]."</h3>";
echo "<ul>";
endif;
echo "<li>".$t["item"]."</li>";
endforeach;
$cat=”“;
foreach($t表格):
如果($cat!=$t[“cat”]):
如果(strlen($cat)>1){
回声“”;
}
$cat=$t[“cat”];
回显“$t[“cat”]”;
回声“”;
endif;
回声“- ”$t[“项目”]。“
- ”;
endforeach;
使用您的代码:
$cat = "";
foreach($table as $t):
if($cat != $t["cat"]):
if(strlen($cat) > 1) {
echo "</ul>";
}
$cat = $t["cat"];
echo "<h3>".$t["cat"]."</h3>";
echo "<ul>";
endif;
echo "<li>".$t["item"]."</li>";
endforeach;
$cat=”“;
foreach($t表格):
如果($cat!=$t[“cat”]):
如果(strlen($cat)>1){
回声“”;
}
$cat=$t[“cat”];
回显“$t[“cat”]”;
回声“”;
endif;
回声“- ”$t[“项目”]。“
- ”;
endforeach;
我注意到选择的答案,
这个sol也可以工作,您不必创建另一个数组
更多详细信息包含在代码注释中
foreach($table as $t):
//if first loop: print category, open a list, assign cat value
if($cat==""){
echo "<h3>".$t["cat"]."</h3>\n";
echo "<ul>\n";
$cat = $t["cat"];
}
//if still in same cat, add item to list
if ($cat == $t["cat"]){
echo "<li>".$t["item"]."</li>\n";
}else{
//if new cat, close list, print new cat, open new list, add current item to list, assign cat value
echo "</ul>\n";
echo "<h3>".$t["cat"]."</h3>\n";
echo "<ul>\n";
echo "<li>".$t["item"]."</li>\n";
$cat = $t["cat"];
}
endforeach;
foreach($t表格):
//如果第一个循环:打印类别,打开列表,分配cat值
如果($cat==“”){
回显“$t[“cat”]。\n”;
回声“\n”;
$cat=$t[“cat”];
}
//如果仍在同一类别中,则将项目添加到列表中
如果($cat==$t[“cat”]){
回声“- ”$t[“项目”]。“
\n”;
}否则{
//如果是新目录,关闭列表,打印新目录,打开新列表,将当前项目添加到列表,分配目录值
回声“
\n”;
回显“$t[“cat”]。\n”;
回声“\n”;
回声“- ”$t[“项目”]。“
\n”;
$cat=$t[“cat”];
}
endforeach;
我注意到选择的答案,
这个sol也可以工作,您不必创建另一个数组
更多详细信息包含在代码注释中
foreach($table as $t):
//if first loop: print category, open a list, assign cat value
if($cat==""){
echo "<h3>".$t["cat"]."</h3>\n";
echo "<ul>\n";
$cat = $t["cat"];
}
//if still in same cat, add item to list
if ($cat == $t["cat"]){
echo "<li>".$t["item"]."</li>\n";
}else{
//if new cat, close list, print new cat, open new list, add current item to list, assign cat value
echo "</ul>\n";
echo "<h3>".$t["cat"]."</h3>\n";
echo "<ul>\n";
echo "<li>".$t["item"]."</li>\n";
$cat = $t["cat"];
}
endforeach;
foreach($t表格):
//如果第一个循环:打印类别,打开列表,分配cat值
如果($cat==“”){
回显“$t[“cat”]。\n”;
回声“\n”;
$cat=$t[“cat”];
}
//如果仍在同一类别中,则将项目添加到列表中
如果($cat==$t[“cat”]){
回声“- ”$t[“项目”]。“
\n”;
}否则{
//如果是新目录,关闭列表,打印新目录,打开新列表,将当前项目添加到列表,分配目录值
回声“
\n”;
回显“$t[“cat”]。\n”;
回声“\n”;
回声“- ”$t[“项目”]。“
\n”;
$cat=$t[“cat”];
}
endforeach;
太棒了。如果我使用对象呢?你可以将它们转换为array.awesome。如果我使用对象呢?您可以将它们转换为数组。这不是关闭elements@zkanoca在接受答案的情况下(作为您的方法),请确保您的数组是基于类别排序的,否则它会导致您为同一类别找到多个ul。@Suchit完全正确,我想他检索的数据已经排序:)@Suchit当然是排序的。我使用orderby cat从数据库中检索数据。clauseit未关闭elements@zkanoca在接受答案的情况下(作为您的方法),请确保您的数组是基于类别排序的,否则它会导致您为同一类别找到多个ul。@Suchit完全正确,我想他检索的数据已经排序:)@Suchit当然是排序的。我使用orderby cat clauseIt从数据库中检索数据。这与答案是否被接受无关,我们需要帮助找到最合适的答案answert@Suchit没错,这就是我的观点,这就是为什么我发布了答案,尽管有一个公认的答案:)这可能有一天会帮助其他人。。。我希望:)问题不在于答案是否被接受,我们需要帮助找到最合适的答案answert@Suchit没错,这就是我的观点,这就是为什么我发布了答案,尽管有一个公认的答案:)这可能有一天会帮助其他人。。。我希望:)只是旁注,我不认为==代码>正确吗?!应该是=
可能是一些PHP专家确认或否认的,这只是一个旁注,我不认为==代码>正确吗?!应该是=代码>可能是一些PHP专家确认或否认了这一点