Php 重建动态下拉列表的数组

Php 重建动态下拉列表的数组,php,Php,我试图获取一个查询结果,构建到一个关联数组中,在该数组中,我使用高级别作为常规下拉列表,该下拉列表选择将加载数组的子级 我目前的职能: $getDisplays = " SELECT * FROM locations l inner join displays d ON d.location_id = l.id;"; $displayResult = $mysqlConn->query($getDisplays); 这将返回: Array ( [ID] => 1 [locatio

我试图获取一个查询结果,构建到一个关联数组中,在该数组中,我使用高级别作为常规下拉列表,该下拉列表选择将加载数组的子级

我目前的职能:

$getDisplays = "
SELECT *
FROM locations l
inner join displays d
ON d.location_id = l.id;";

$displayResult = $mysqlConn->query($getDisplays);
这将返回:

Array
(
[ID] => 1
[location_name] => Office 1
[display_name] => lobby
[location_id] => 1
)
Array
(
[ID] => 2
[location_name] => Office 1
[display_name] => break room
[location_id] => 1
)
Array
(
[ID] => 3
[location_name] => Office 2
[display_name] => lobby
[location_id] => 2
)
Array
(
[ID] => 4
[location_name] => Office 2
[display_name] => break room
[location_id] => 2
)
Array
(
[ID] => 10
[location_name] => Office 5
[display_name] => Break Room
[location_id] => 5
)
Array
(
[ID] => 11
[location_name] => Office 5
[display_name] => Lobby
[location_id] => 5
)
Array
(
[ID] => 12
[location_name] => Office 5
[display_name] => Conference Room
[location_id] => 5
)
我正在尝试创建动态下拉列表,以便第一个下拉列表显示每个不同的位置名称,第二个下拉列表包含相应的显示名称,具体取决于选择

因此,对于这个数组,第一个下拉列表应该是:

<option>Office 1</option>
<option>Office 2</option>
<option>Office 5</option>
办公室1
办公室2
办公室5
如果我选择Office 1,下一个下拉列表将包含:

<option>lobby</option>
<option>break room</option>
大厅
休息室
我现在构建它们的方式:

<label for="plantSelect">Select A Location</label>
<select class="form-control" id="plantSelect">
    <?php foreach($displayResult as $area=>$display):?>
    <option><?php echo $display['location_name']?></option>
    <?php endforeach;?>
</select>

<label for="areaSelect">Select An Area</label>
<select class="form-control" id="areaSelect">

    <option>Please Choose a Location</option>

</select>
选择一个位置
选择一个区域
请选择一个位置
问题是,第一个下拉列表显示了每个条目,因此它显示了Office 1、Office 2和Office 5的多个实例。我希望它只显示每个位置名称中的一个,然后加载下一个下拉列表,其中包含所选位置的子项(display_name)。我还需要display中的ID,以便将其保存到数据库中,所以我想,一旦我解决了这个问题,我应该能够在以后的表单中包含它


但是,阵列有什么问题吗?

您可以像这样重建阵列:

$displayNames = array();
foreach($displayResult as $subArray) {
  if(!array_key_exists($subArray['location_name'], $displayNames)) {
    $displayNames[$subArray['location_name']] = array();

  }
    $displayNames[$subArray['location_name']][] = $subArray['display_name'];
}
现在,您可以执行以下操作:

<?php foreach($displayNames as $displayName):?>
<option><?php echo key($displayName['location_name'])?></option>
<?php endforeach;?>

事情不会重演。另外,现在您可以轻松创建其他下拉列表

$displayNames = array();
foreach($displayResult as $subArray) {
  if(!array_key_exists($subArray['location_name'], $displayNames)) {
      $displayNames[$subArray['location_id']]['location'] = $subArray['location_name'];
      $displayNames[$subArray['location_id']]['display_name'] = array();
  }

  array_push( $displayNames[$subArray['location_id']]['display_name'], array($subArray['ID'] => $subArray['display_name']));
}

打印(显示名称)

所以,我尝试了这个,看起来我的第一个下拉列表现在只有正确数量的条目,但它们都是0