我正在尝试打印这样的列表......
Catagory 01 subjects1 subjects4 subjects2 subjects5 subjects3 subjects6 Catagory 02 subjects1 subjects4 subjects2 subjects5 subjects3 subjects6 Catagory 03 subjects1 subjects4 subjects2 subjects5 subjects3 subjects6
一个类别有自己的主题。目前我有类别ID并创建了一个查询来获取其类别名称及其拥有的主题。这是我创建的查询..
$categoryIds = implode(',', $_SESSION['category']);
$q = "SELECT c. category_id AS ci, c.category_name AS cn, s.subject_name AS sn, s.subject_id AS si
FROM category AS c
INNER JOIN category_subjects AS cs ON cs.category_id = c.category_id
INNER JOIN subjects AS s ON s.subject_id = cs.subject_id
WHERE c.category_id IN ($categoryIds)";
$r = mysqli_query( $dbc, $q) ;
以上查询给出了每个类别和它自己的主题。它就像一个多维数组。我的问题是我试图打印这个日期类似于上面的列表...但是无法让它工作..
$ catID = false;
while($ row = mysqli_fetch_array($ r,MYSQLI_ASSOC)){
echo '<div>';
if ( $catID != $row['ci']) {
echo '<h3>Category 01: <span>' . $row['cn'] . '</span><span></span></h3>';
}
echo '<div class="container">';
echo '<p>' . $row['sn']. '</p>'; // This subjects I need to display in a table with 2 columns..
$catID = $row['ci'];
echo '</div>';
echo '</div>';
}
有人帮我这个吗?非常感谢您的想法和意见。
谢谢。
答案 0 :(得分:0)
无法发布代码片段,因为我没有工作环境,但这里有提示。
您需要在order by子句中添加类别ID及其名称,以确保记录不会混乱。
在循环中迭代结果。初始化一个临时变量(我们称之为'temp')为空值。
要打印类别名称和ID,您可以使用临时变量('temp'),该变量用于将当前类别与正在打印的类别进行比较。一旦类别改变,临时变量值就会改变。
主题可以存储在数组($ subject_arr)中,并在类别更改内部循环时打印。稍后在循环外检查主题数组是否有任何内容,如果是,请打印以确保没有留下任何内容。
要以列格式打印主题(如果您的行是固定的,列是动态的),您可以按所需的固定行数划分主题数,这将为您提供列数。 (如果有余数,只有+1个列)
答案 1 :(得分:0)
如何首先使用按照
定义的键创建数组array("Category 1" => (
array ( 0 => "subject1", "subject2", ...)),
"Category 2" => (
array ( 0 => "subject1", "subject2", ...)),
...);
可以通过
来做到这一点<?php
$r = array("0" => array("ci" => "1", "cn" => "Category1", "si" => "1", "sn" => "subject1"),
array("ci" => "1", "cn" => "Category1", "si" => "2", "sn" => "subject2"),
array("ci" => "1", "cn" => "Category1", "si" => "3", "sn" => "subject3"),
array("ci" => "1", "cn" => "Category1", "si" => "4", "sn" => "subject4"),
array("ci" => "2", "cn" => "Category2", "si" => "5", "sn" => "subject1"),
array("ci" => "2", "cn" => "Category2", "si" => "6", "sn" => "subject2"),
array("ci" => "2", "cn" => "Category2", "si" => "7", "sn" => "subject3"),
array("ci" => "2", "cn" => "Category2", "si" => "8", "sn" => "subject4"));
//[...]
$arr = array();
foreach($r as $entry) {
$cat = $entry["cn"];
if (!array_key_exists($cat, $arr)) {
$arr[$cat] = array();
}
array_push($arr[$cat], $entry);
}
foreach($arr as $key => $value) {
echo $key."<br>";
foreach($value as $infos) {
echo "- ".$infos["sn"]."<br>";
}
echo "<br>...";
}
?>
答案 2 :(得分:0)
一种简单的方法是创建一个主题数组,按类别分组。使用category_id作为分组的关键:
$subjects = array();
foreach($r as $subject) {
if(!isset($subjects[$subject['ci']]) $subjects[$subject['ci']] = array();
$subjects[$subject['ci']] []= $subject;
}
foreach($subjects as $category => $values) {
echo $category."\n";
foreach($values as $subject)
echo ' '.$subject."\n";
}
如果你真的需要这个2列表示,你可以拆分数组(例如使用array_slice)并在每次迭代时输出每个值中的一个。