PHP-массив отражает повторяющиеся значения

У меня есть многомерное, что я получаю его из списка. Я хочу, чтобы элементы в этом списке были сгруппированы по «Категория», это код php:

foreach ($re_services as $re_serv){ $ows_Category = $re_serv->getAttribute("ows_OfferingCatType"); $ows_ServiceID = $re_serv->getAttribute("ows_Title"); $ows_Service = $re_serv->getAttribute("ows_OfferingsName_Edit"); $ows_Hours = $re_serv->getAttribute("ows_Hours"); $Service_Array []= array( "Category" => $ows_Category, "ServiceID" => $ows_ServiceID, "Service" => $ows_Service, "Hours" => $ows_Hours ); } 

И мой вывод таков:

 массив
 (
     [0] => Массив
         (
             [Категория] => Стиль
             [ServiceID] => Blow Dry-Male_104
             [Сервис] => Дыхание сухих мужчин
             [Часы] => 1.00000000000000
         )

     [1] => Массив
         (
             [Категория] => Стиль
             [ServiceID] => Дамы Cut & Blow Dry_101
             [Сервис] => Дамы вырезать и выдувать
             [Часы] => 1.00000000000000
         )

     [2] => Массив
         (
             [Категория] => Стиль
             [ServiceID] => Longer Blow Dry_103
             [Сервис] => Длительный выдох
             [Часы] => 2.00000000000000
         )

     [3] => Массив
         (
             [Категория] => Стиль
             [ServiceID] => Mens Cut & Blow Dry_102
             [Сервис] => Мужчины вырезать и выдувать
             [Часы] => 1.00000000000000
         )

     [4] => Массив
         (
             [Категория] => Супер услуги
             [ServiceID] => Half Head_106
             [Сервис] => Half Head
             [Часы] => 1.00000000000000
         )

     [5] => Массив
         (
             [Категория] => Супер услуги
             [ServiceID] => Highlight / Lowlights_105
             [Сервис] => Выделение / Низкие фоны
             [Часы] => 3.00000000000000
         )

     [6] => Массив
         (
             [Категория] => Супер услуги
             [ServiceID] => Роскошные процедуры для волос_109
             [Сервис] => Роскошные процедуры для волос
             [Часы] => 4.00000000000000
         )

     [7] => Массив
         (
             [Категория] => Технический
             [ServiceID] => Bridal Hair_108
             [Сервис] => Свадебные волосы
             [Часы] => 4.00000000000000
         )

     [8] => Массив
         (
             [Категория] => Технический
             [ServiceID] => Волосы Up_107
             [Сервис] => Волосы вверх
             [Часы] => 1.00000000000000
         )

 )

Как видите, у меня есть 3 категории (Styling, Super Services, Technical). Теперь мне нужен html-тег с такими значениями:

 <select> <optgroup label="Category"> <option value="ServiceID">Service Hours</option> </optgroup> </select> 

Но без каких-либо дубликатов с категорией. Как я могу это достичь?

Related of "PHP-массив отражает повторяющиеся значения"

Попробуй это:

 $categories = array(); foreach ($re_services as $re_serv){ $ows_Category = $re_serv->getAttribute("ows_OfferingCatType"); $ows_ServiceID = $re_serv->getAttribute("ows_Title"); $ows_Service = $re_serv->getAttribute("ows_OfferingsName_Edit"); $ows_Hours = $re_serv->getAttribute("ows_Hours"); $Service_Array []= array( "Category" => $ows_Category, "ServiceID" => $ows_ServiceID, "Service" => $ows_Service, "Hours" => $ows_Hours ); //add the following part: if(!in_array($ows_Category, $categories)) $categories[] = $ows_Category; } 

Теперь вы можете использовать цикл foreach в $categories для печати правильных html-тегов:

 echo '<select>'; foreach($categories as $category){ echo '<optgroup label="' . $category . '">'; foreach ($re_services as $re_serv){ if($re_serv['Catergory'] == $category) echo '<option value="' . $re_serv['ServiceID'] . '">' . $re_serv['Service'] . '</option>'; } echo '</optgroup>'; } echo '</select>'; 

Другой вариант – полностью изменить структуру массива:

 foreach ($re_services as $re_serv){ $ows_Category = $re_serv->getAttribute("ows_OfferingCatType"); $ows_ServiceID = $re_serv->getAttribute("ows_Title"); $ows_Service = $re_serv->getAttribute("ows_OfferingsName_Edit"); $ows_Hours = $re_serv->getAttribute("ows_Hours"); $Service_Array[$ows_Category][]= array( "ServiceID" => $ows_ServiceID, "Service" => $ows_Service, "Hours" => $ows_Hours ); } echo '<select>'; foreach($Service_Array as $category => $re_services){ echo '<optgroup label="' . $category . '">'; foreach($re_services as $re_serv){ echo '<option value="' . $re_serv['ServiceID'] . '">' . $re_serv['Service'] . '</option>'; } echo '</optgroup>'; } echo '</select>';