3

これらの行と値を含む mysql テーブルを作成しました:

   category | item_name
   ======================= 
   Dinner   |  Lobster
   Dinner   |  Pizza
   Lunch    |  Sandwich
   Lunch    |  Soup
   Lunch    |  Salad
  -------------------------

次に、データベースにクエリを実行すると、結果が配列 "$menu_selected" に配置されます。「$menu_selected」をループして結果を表示します。

    foreach($menu_selected as $m):
           echo $category = $m->category . "<br>";
           echo $item_name = $m->item_name . "<br><br>";
    endforeach;

出力:

    Dinner
    Lobster

    Dinner
    Pizza

    Lunch
    Sandwich

    Lunch
    Soup

    Lunch
    Salad

各カテゴリがカテゴリの最初のインスタンスのみをエコーし​​ないように、PHP でカテゴリをフィルタリングするにはどうすればよいですか? カテゴリ行の値が常に「ディナー」または「ランチ」になるとは限りません。if($category =='Dinner'){} のような定数と比較せずに、カテゴリをエコーできるようにしたいと考えています。1週間かけて調べましたが、わかりません。誰の助けも大歓迎です。

出力を次のようにしたい:

 **Dinner**
 Lobster
 Pizza
 Sandwich

 **Lunch**
 Sandwich
 Soup
 Salad
4

3 に答える 3

2

クエリでは必ずカテゴリ別に注文してください。次に、ループの外側に $category 変数を追加するだけです。その変数が変更された場合は、ヘッダーを出力します。

$category = '';
foreach($menu_selected as $m) {
     if ($m->category != $category) {
        echo "**$m->category** <br>";
        $category = $m->category;
     }
     echo $m->category . "<br>";
     echo $m->item_name . "<br><br>";
}
于 2013-09-28T22:17:01.780 に答える
0

2 つの foreach メソッドを使用するだけです。1 つ目はカテゴリ用、2 つ目はアイテム用

foreach($menu_selected as $m1):
       echo $category = $m1->category . "<br>";        
    foreach($menu_selected as $m):
       echo $item_name = $m->item_name . "<br><br>";
            if ($m->category != $m1->category) 
                    {
                      break;
                    }
    endforeach;
endforeach;
于 2013-09-28T22:19:25.480 に答える
0
$cat_item_array = ARRAY();

foreach($menu_selected as $m) {
    if (!isset($cat_item_array[$m->category])) {
     $cat_item_array[$m->category] = $m->item_name;
     echo "found new category: ".$m->category . " (Added item: ".$m->item_name.")<br>";
     continue;
   }
    $cat_item_array[$m->category] = $m->item_name;
    echo "Added item ".$m->item_name." to category ".$m->category.".<br><br>";
}

print '<pre>'; var_dump($cat_item_array); print '</pre>';
于 2013-09-28T22:20:25.627 に答える