根据PDO的fetchAll()
方法,我有一个来自我的数据库的二维城市数组,我用它来生成带有选项的下拉列表,如下所示:
foreach($option as $city) {
echo '<option value="'. $city['city_id'] . '">' . $city['city_name'] . '</option>';
}
这一切都很好,但它从整个州/省返回一个相当长的城市列表,因此为了使选择更友好,我想动态添加分类<optgroup>
“部分”基于他们的起始信。结果已按名称排序,因此该部分已经处理。
我已尝试使用preg_grep()
和preg_match()
将数组拆分为较小的数组,然后为每个数组回显一个optgroup,但这不太有用...... 所有城市显示后,> optgroup B 会被推到列表底部。
$citiesA = preg_grep('/^A.*/', $option);
$citiesB = preg_grep('/^B.*/', $option);
echo '<optgroup label="A">';
foreach($citiesA as $a) {
echo '<option value="'. $a['city_id'] . '">' . $a['city_name'] . '</option>';
}
echo ' </optgroup>';
echo '<optgroup label="B">';
foreach($citiesB as $b) {
echo '<option value="'. $b['city_id'] . '">' . $b['city_name'] . '</option>';
}
echo ' </optgroup>';
非常感谢有关如何实现这一目标的任何建议。
答案 0 :(得分:2)
怎么样
$startl=""; // current Starting letter
foreach($option as $o)
{
if (($c=substr($o['city_name'], 0, 1)) != $startl) // if starting letter changed
{
if ($startl) echo '</optgroup>';
echo '<optgroup label="'. $c .'">'; // create new group
$startl=$c;
}
echo '<option value="'. $o['city_id'] . '">' . $o['city_name'] . '</option>';
}
echo '</optgroup>'; // end the last group