2012-10-17 32 views
1

我知道這裏有類似的問題,我已經看了一些帖子和答案,其中一些嘗試,但無論是我的知識有限PHP或我的案例的特點,我需要問這個。如何避免陣列(類別名稱)的幾個項目之一的重複

我建立一個字典(ID,英國,保加利亞,theme_id),想組根據theme_id搜索結果。我用我的查詢ORDER BY theme_id, id但我最終與每個結果的顯示主題,而我想如下對其進行分類:

主題1個 - 結果1 - 結果2 主題2 - 結果3 - 結果4 .....

這裏是我的代碼的相關部分:

while($row = mysql_fetch_array($result)) { 
    //$id  = $row['id']; 
    $english = $row['english']; 
    $bulgarian = $row['bulgarian']; 
    $theme_id = $row['theme_id']; 

    $theme_name = "theme_".$lang; 
    $theme_query= mysql_query("SELECT theme_id,".$theme_name." FROM ".DICTIONARY_THEMES." WHERE theme_id = ".$theme_id.""); 
    $theme_row = mysql_fetch_array($theme_query); 
    $theme  = $theme_row[$theme_name]; 

    if($source == "english") { 

     foreach($keywords as $keyword) { 
      $english = preg_replace("|($keyword)|Ui", "<span style=\"color:#780223\">".$keyword."</span>", $english); 
     } 

     $print .= "<li class=\"results-row\">".$theme.": ".$english." = ".$bulgarian."</li>"; 
    } 

    elseif($source == "bulgarian") { 
     foreach($keywords as $keyword) { 
      $bulgarian = preg_replace("|($keyword)|Ui", "<span style=\"color:#780223;\">".$keyword."</span>", $bulgarian); 
     } 

     $print .= "<li class=\"results-row\">".$theme.": ".$bulgarian." = ".$english."</li>"; 
    } 
}//end while 

編輯:解決了,一個朋友幫助改善我的代碼。

while($row = mysql_fetch_array($result)) { 
    $english = $row['english']; 
    $bulgarian = $row['bulgarian']; 
    $theme_id = $row['theme_id']; 

    $theme_name = "theme_".$lang; 
    $theme_query= mysql_query("SELECT theme_id,".$theme_name." FROM ".DICTIONARY_THEMES." WHERE theme_id = ".$theme_id.""); 
    $theme_row = mysql_fetch_array($theme_query); 
    $theme  = $theme_row[$theme_name]; 

    // add all results to an array 
    $results[] = array(
     'english' => $english, 
     'bulgarian' => $bulgarian, 
     'theme'  => $theme 
    ); 

}//end while 

$theme = null; 
foreach ($results as $result) { 
    if ($theme != $result['theme']) { 
     $theme = $result['theme']; 
     $print .= "<h3>" . $result['theme'] . "</h3>"; 
    } 

    if ($source == "english") { 
     foreach ($keywords as $keyword) { 
      $result['english'] = preg_replace("|($keyword)|Ui", "<span style=\"color:#780223\">" . $keyword . "</span>", $result['english']); 
     } 
     $print .= "<li class=\"results-row\">" . $result['english'] . " = " . $result['bulgarian'] . "</li>"; 
    } elseif ($source == "bulgarian") { 
     foreach ($keywords as $keyword) { 
      $result['bulgarian'] = preg_replace("|($keyword)|Ui", "<span style=\"color:#780223;\">" . $keyword . "</span>", $result['bulgarian']); 
     } 
     $print .= "<li class=\"results-row\">" . $result['bulgarian'] . " = " . $result['english'] . "</li>"; 
    } 
} 
+4

您應該考慮使用** ** PDO訪問數據庫。 ** mysql _ ***函數不再受支持,並且不能爲您提供**準備語句**的能力。 – AlexP

+0

很難說,因爲你的問題很難理解,但我認爲你沒有發佈所有相關的代碼。你用什麼SQL查詢將結果放入'$ result'?您在您的問題中描述了一些問題,但很難在沒有看到該查詢的情況下確切知道發生了什麼。 – sgroves

+0

這就是:\t \t'如果($ theme_id == 「0」){ \t \t \t的foreach($關鍵字爲$關鍵字){ \t \t \t \t $查詢= 「SELECT * FROM」 .DICTIONARY_TABLE「「。 。 \t \t \t \t「WHERE」。$ source。「LIKE'%」。mysql_escape_string($ keyword)。「%'」。 \t \t \t \t 「ORDER BY theme_id,ID」; \t \t \t} \t \t}' – cheeseus

回答

0

根據您的代碼,您應該首先將所有項目添加到數組,然後在單獨的函數/塊中打印該數組。

你的第二個MySQL查詢後立刻放像

$output[$theme_id] = mysql_fetch_array($theme_query); 

,並將所有下面的代碼進行外結果-while循環(while($row = mysql_fetch_array($result)))的。

但事實上我會盡量把MySQL查詢一起,有一個排序,分組與所有的語言和不查詢循環中的數據庫中的所有選定的主題效果。

您也可以使用現有的東西,比如這個singleton Lexicon class

+0

我想我做了你勸什麼,但我仍然無法想出一個辦法做到這一點。這裏是我現在的代碼: 'while($ row = mysql_fetch_array($ result)){ \t $ english \t = $ row ['english']; \t $保加利亞語\t = $ row ['bulgarian']; \t $ theme_id \t = $ row ['theme_id']; \t $ theme_name \t =「theme _」。$ lang; \t $ theme_query = mysql_query(「SELECT theme_id,」。$ theme_name。「FROM」.DICTIONARY_THEMES。「WHERE theme_id =」。$ theme_id。「」); \t $ theme_row \t = mysql_fetch_array($ theme_query); \t $ theme \t \t = $ theme_row [$ theme_name]; \t \t $結果[] =陣列( \t '英語' \t => $英語, \t '保加利亞' \t => $保加利亞, \t '主題' \t \t => $主題 \t); } // end while' – cheeseus

+0

@cheeseus請在上面插入您的問題的任何更新,並使用代碼格式... – feeela

+0

這裏沒有任何代碼的空間... 因此,這裏是整個SEARCH.PHP頁面的鏈接打印到PDF。相關代碼從144行開始。 [鏈接](http://cheeseus.org/downloads/search.php.pdf) – cheeseus