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

1 に答える 1

0

コードに基づいて、最初にすべてのアイテムを配列に追加し、その後、その配列を別の関数/ブロックに出力する必要があります。

2番目のMySQLクエリの直後に、次のようなものを入力します

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

次のすべてのコードを外側のresult-while-loop(while($row = mysql_fetch_array($result)))から移動します。

しかし実際には、MySQLクエリをまとめて、ループ内でデータベースにクエリを実行せずに、選択したすべてのテーマをすべての言語で並べてグループ化した結果を作成しようとしました。

または、既存のもの、たとえばこのシングルトンLexiconクラスを使用します。

于 2012-10-17T18:51:00.897 に答える