0

私はこのようなリストを印刷しようとしています....

Catagory 01
   subjects1   subjects4
   subjects2   subjects5
   subjects3   subjects6

Catagory 02
   subjects1   subjects4
   subjects2   subjects5
   subjects3   subjects6

Catagory 03
   subjects1   subjects4
   subjects2   subjects5
   subjects3   subjects6

1 つのカテゴリには独自の主題があります。現時点では、カテゴリ 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>';

}

これを手伝ってくれる人はいますか?あなたのアイデアやコメントは大歓迎です。

ありがとうございました。

4

3 に答える 3

0

作業環境がないため、コード スニペットを投稿できませんが、ここにヒントがあります。

レコードがごちゃごちゃしないように、order by 句にカテゴリ ID とその名前を追加する必要があります。

  1. ループで結果を反復処理します。一時変数 ('temp' と呼びます) を空白の値に初期化します。

  2. カテゴリ名と ID を出力するには、現在のカテゴリと現在出力されているカテゴリを比較するために使用される一時変数 ('temp') を使用できます。カテゴリが変更されると、一時変数の値が変更されます。

  3. サブジェクトを配列 ($subject_arr) に格納し、ループ内でカテゴリが変更されたときに最後に出力できます。後でループの外側で、件名配列にコンテンツがあるかどうかを確認し、ある場合はそれを出力して、何も残されていないことを確認します。

  4. 被験者を列形式で印刷するには (行が固定で列が動的な場合)、被験者の数を必要な行の固定数で割ると、列の数が得られます。(余ったら列数+1だけ)

于 2013-01-12T10:54:35.117 に答える
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>...";
    }
?>
于 2013-01-12T10:58:34.163 に答える
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 を使用)、反復ごとに各値の 1 つを出力できます。

于 2013-01-12T10:58:58.267 に答える