база данных — есть ли более эффективный способ записи списка выбора, сгруппированного по состоянию в Stack Overflow

Я строю веб-сайт, и у него есть список выбора, сгруппированный по штатам. Есть ли более эффективный способ написания этого списка выбора, поэтому у меня не так много разных циклов записи?

В моей базе данных есть таблица с именем location:

id    region            state
1     Sydney            NSW
2     Newcastle         NSW
3     Wollongong        NSW
4     Wagga Wagga       NSW
5     Geelong           Vic

…так далее

В настоящее время я распечатываю их в списке выбора, сгруппированном по состоянию, как это.

<select name="location" id="location">
<?php
$locations = getTable("location", $DB);
$locationsByState = [];
//chunk array by state
foreach($locations as $loc)
{
$locationsByState[$loc['state']][] = $loc;
}
?>
<optgroup label="NSW">
<?php
foreach($locationsByState['NSW'] as $opt)
echo '<option>' . $opt['region'] .'</option>'
?>
</optgroup>
<optgroup label="QLD">
<?php
foreach($locationsByState['QLD'] as $opt)
echo '<option>' . $opt['region'] .'</option>'
?>
</optgroup>
<optgroup label="SA">
<?php
foreach($locationsByState['SA'] as $opt)
echo '<option>' . $opt['region'] .'</option>'
?>
</optgroup>
<optgroup label="VIC">
<?php
foreach($locationsByState['VIC'] as $opt)
echo '<option>' . $opt['region'] .'</option>'
?>
</optgroup>
<optgroup label="TAS">
<?php
foreach($locationsByState['TAS'] as $opt)
echo '<option>' . $opt['region'] .'</option>'
?>
</optgroup>
<optgroup label="WA">
<?php
foreach($locationsByState['WA'] as $opt)
echo '<option>' . $opt['region'] .'</option>'
?>
</optgroup>
<optgroup label="ACT">
<?php
foreach($locationsByState['ACT'] as $opt)
echo '<option>' . $opt['region'] .'</option>'
?>
</optgroup>
<optgroup label="NT">
<?php
foreach($locationsByState['NT'] as $opt)
echo '<option>' . $opt['region'] .'</option>'
?>
</optgroup>
</select>

0

Решение

Вы можете покрыть это в 2 простых цикла, как показано ниже:

<select name="location" id="location">

<?php
$locations = getTable("location", $DB);
$locationsByState = [];

// chunk array by state
foreach($locations as $loc)
{
$locationsByState[$loc['state']][] = $loc;
}

foreach($locationsByState as $label => $value) {
?>

<optgroup label="<?= $label; ?>">
<?php
foreach($value as $opt) {
echo '<option>' . $opt['region'] .'</option>'
}
?>
</optgroup>

<?php
}
?>

</select>
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector