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