php - 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"];
}
}
解决方案
您需要正确编写标签,而不是
' <
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));