Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何正确列出不同类别的项目?通用编程技术_Php_Loops_Foreach - Fatal编程技术网

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专家确认或否认了这一点