2013-09-28 74 views
3

我已經創建了一個MySQL表,其包括這些行&值:PHP如果一個變量有重複只顯示第一個實例?

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'){}的常量進行比較。我花了一個星期的時間研究,無法弄清楚。任何人的幫助將不勝感激。

我所要的輸出是這樣的:

**Dinner** 
Lobster 
Pizza 
Sandwich 

**Lunch** 
Sandwich 
Soup 
Salad 

回答

1

必須確保所訂購按類別上查詢。然後只需在循環外部添加一個$ 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>"; 
} 
0

只需使用2的foreach方法。第一個爲第二類爲一個項目

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; 
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>'; 
+0

最重要的是你與gview給出的答案...這意味着首先優化您的SQL結合這一點。 – djot

相關問題