2013-01-12 91 views
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 

一類都有自己的主題。目前我有類別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;

而($行= 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

無法發佈代碼片段,因爲我沒有工作環境,但這裏有提示。

您需要添加類別標識及其名稱以確保順序,以確保記錄不混亂。

  1. 迭代循環中的結果。初始化一個臨時變量(讓我們稱它爲'temp')爲空值。

  2. 要打印類別名稱和標識,您可以使用臨時變量('temp'),用於將當前類別與正在打印的類別進行比較。一旦類別改變,臨時變量值就會改變。

  3. 可以將對象存儲在一個數組($ subject_arr)中,並在類別在循環內部更改時在最後打印。稍後在循環之外檢查主體數組是否有任何內容,如果是,則打印以確保沒有任何內容被留下。

  4. 要以列格式打印主題(如果您的行是固定的並且列是動態的),您可以通過固定的行數來劃分主題的數量,這會給出列數。 (如果有剩餘,只需+1列數)

+0

感謝您的回覆。你的1步和2步對我來說都行。第三和第四步對我來說非常混亂。我需要在2列的表格中顯示主題。我嘗試過,但不能讓它工作..檢查我更新第1步的答案。 – TNK

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>..."; 
    } 
?> 
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)並在每次迭代中輸出每個值之一。