首页 > 解决方案 > While 循环仅显示元素 x 次

问题描述

我有这个扩展/关闭 div。我会有一个类别标题(显示一次),下面有子类别信息(需要循环 x 次)。除了我需要子类别信息来循环它存在的次数之外,一切(有点)都有效。

现在这是我到目前为止得到的结果:https ://imgur.com/a/nAg2Uhd

如您所见,它正在关闭标签,再次循环并在下面添加子类别

$result_array = mysqli_query($connect,"SELECT * FROM tbl_customer, categories WHERE tbl_customer.category_QA = categories.id ORDER BY Category ASC");
    $checkCategory = '';

    while($data = mysqli_fetch_array($result_array)){


   //works as it shows the category once
       if  ($checkCategory != $data["Category"]){


    echo'           
    <div class="collapse-group">
              <div class="collapse-item">
                <div class="collapse-head">
                      '.$data["Category"].'
                </div>
                <div class="collapse-content">';


      }


    //Here is where I need to loop through all sub category data and display them 
     echo '    <p>  '.$data["productName"].'</p>';



      //Should only run once all sub category data has been displayed 
      //close all tags 
      if  ($checkCategory != $data["Category"]){

    echo    '
                      </div>
                 </div>
              </div>';

        $checkCategory = $data["Category"];


      }

    }

标签: php

解决方案


您需要正确编写标签,而不是

'            <
            div class = "collapse-group" >

你需要

'<div class = "collapse-group">

而不是

' <
            /div>

你需要

' </div>

这应该可以解决错误,但我也会为您提出更好的方法。首先,你需要确保它是可重用的,所以让我们确保它在一个function. 其次,您需要确保代码生成与显示分开:

function generateCategories($result_array) {
    $checkCategory = '';
    $output = array();
    $index = -1;
    while ($data = mysqli_fetch_array($result_array)) {
        if ($checkCategory != $data["Category"]) {
            $checkCategory = $data["Category"];
            $output[]=array("key" => $checkCategory, "values" => array());
            $index++;
        }
        $output[$index]["values"][]=$data["productName"];
    }
    return $output;
}

function generateCategoryStructure($input) {
    $output = "";
    for ($index = 0; $index < count($input); $index++) {
        $output .= '<div class = "collapse-group">'.
                       '<div class = "collapse-item">'.
                           '<div class = "collapse-head">'.$input[$index]["key"].'</div>'.
                           '<div class = "collapse-content">';
        for ($innerIndex = 0; $innerIndex < count($input[$index]["values"]); $innerIndex++) {
            $output .=         '<p>'.$input[$index]["values"][$innerIndex].'</p>';
        }
        $output .=         '</div>'.
                       '</div>'.
                   '</div>';
    }
}

接着:

echo generateCategoryStructure(generateCategories($result_array));

推荐阅读