php - 动态生成选项列表以重复的 optgroup 标签结束

标签 php html mysql algorithm html-select

我知道对此必须有一个简单的答案:我正在尝试动态填充一个选择框。我在一定程度上取得了成功,但是当我对选项进行操作时,它会不断重复每个选项请检查我的代码并告诉我哪里做错了

$country_id = 'management';
$country_id = trim(mysql_escape_string($_POST["country_id"]));
<!--db details-->
$dbc2 = mysqli_connect(DB_HOST2, DB_USER2, DB_PASSWORD2, DB_NAME2) or trigger_error(mysql_error(),E_USER_ERROR);
$q = "SELECT b.institute_state, b.institute_district, b.institute_location 
FROM institutes_courses a, institutes b
WHERE a.institute_course_stream = '".$country_id."'
AND a.institute_id = b.institute_id
group by b.institute_district
ORDER BY institute_state ASC
";
$r = mysqli_query($dbc2, $q);
$institutes = array();

while(list($institute_state, $institute_district, $institute_location) = mysqli_fetch_array($r, MYSQLI_BOTH)) {
    $institutes[] = array('state' => $institute_state, 'district' => $institute_district, 'location' => $institute_location);
}//end while

echo  '<select name="state" id="drop2" required>
<option value="" id="state" selected>Please Select A Location</option>';

foreach ($institutes as $inst) {
    echo '<optgroup label="'.$inst['state'].'">';
    //echo '<optgroup label="'.$inst['state'].'">';


        echo '<option value="'.$inst['location'].'">State: '.$inst['state'].', Location: '.$inst['location'].'</option>';

        echo '</optgroup>';
    }

echo '</select>';

这给了我这样的结果:

<optgroup label:state>
  <option>District</option>
</optgroup>
<optgroup label:state>
  <option>District</option>
</optgroup>
<optgroup label:state2>
  <option>District</option>
</optgroup>
<optgroup label:state2>
  <option>District</option>
</optgroup>etc...

我希望它是这样的:

<optgroup label:state>
  <option>District</option>
  <option>District</option>
</optgroup>
<optgroup label:state2>
  <option>District</option>
  <option>District</option>
</optgroup>etc...

最佳答案

您应该验证您的 $inst['state'] 是否更改,在这种情况下我添加了一个名为 $count 的控制变量,将您的代码更改为:

<?php

$institutes = array();
$institutes[] = array('state' => 'delhi', 'location' => 'mg road');
$institutes[] = array('state' => 'delhi', 'location' => 'delhi_loc');
$institutes[] = array('state' => 'karnataka', 'location' => 'kannur_ayikere');
$institutes[] = array('state' => 'state1', 'location' => 'location1');
$institutes[] = array('state' => 'state1', 'location' => 'location2');
$institutes[] = array('state' => 'state1', 'location' => 'location3');
$institutes[] = array('state' => 'state2', 'location' => 'location1');
$institutes[] = array('state' => 'state3', 'location' => 'location1');
$institutes[] = array('state' => 'state3', 'location' => 'location2');

echo  '<select name="state" id="drop2" required>
<option value="" id="state" selected>Please Select A Location</option>';

$label = '';
$cant = array_count_values(array_column($institutes, 'state'));
$count = 0;

foreach ($institutes as $inst) {

    if($count == 0) {
    echo '<optgroup label="'.$inst['state'].'">';
    }
        echo '<option value="'.$inst['location'].'">State: '.$inst['state'].', Location: '.$inst['location'].'</option>';
        $count++;

    if($cant[$inst['state']] == $count) {
        echo '</optgroup>';
        $count = 0;
    }

    $label =  $inst['state'];
  }

echo '</select>';

关于php - 动态生成选项列表以重复的 optgroup 标签结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29482878/

相关文章:

php - 如何将 PDF (jsPdf) 发送到后端 (PHP - Zend 1)

php - 如何使用php将excel中的日期转换为sql格式?

python - 点击后如何从 Selenium 返回 DOM

css - Bootstrap 模态弹出窗体代码不起作用

php - 在 MySQL 中检索组的第一个值?

php - CakePHP 管理部分路由和重定向

php - Magento API 太慢?

python - 使用 Python 从网页中抓取表格

mysql - org.hibernate.MappingException :Could not determine type for

MySQL - 子查询/JOIN同表不同修订项