2013-09-28 2 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

Смежные вопросы