У меня есть многомерное, что я получаю его из списка. Я хочу, чтобы элементы в этом списке были сгруппированы по «Категория», это код 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>
Но без каких-либо дубликатов с категорией. Как я могу это достичь?
Попробуй это:
$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>';