Php 用于填充下拉列表的数组,键为isn';行不通

Php 用于填充下拉列表的数组,键为isn';行不通,php,arrays,Php,Arrays,我在用正确的数组值填充下拉框时遇到问题,这导致了另一个问题:用适当的选定父值的子项动态填充第二个下拉框 我有一个函数文件来执行此操作: $getDisplays = " SELECT * FROM locations l inner join displays d ON d.location_id = l.id;"; $displayResult = $mysqlConn->query($getDisplays); $displayNames = array(); foreach($d

我在用正确的数组值填充下拉框时遇到问题,这导致了另一个问题:用适当的选定父值的子项动态填充第二个下拉框

我有一个函数文件来执行此操作:

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

$displayResult = $mysqlConn->query($getDisplays);

$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'];
}
在我的html文件中,我执行以下操作:

<label for="plantSelect">Select A Location</label>
  <select class="form-control" id="plantSelect">
    <?php foreach($displayNames as $displayName):?>
    <option><?php echo key($displayName)?></option>
    <?php endforeach;?>
  </select>
所以我的第一个下拉列表应该是Office 1到Office 5,当选中时,第二个下拉列表应该填充子元素

任何帮助都将返回传递给函数的数组指针的当前位置。在您的示例中,您正在传入
displayName
,调用该数组时,指针在该数组中的位置始终为0,因为您没有迭代该数组。更好的解决办法是

<?php foreach($displayNames as $key => $displayName):?>
<option><?php echo $key; ?></option>
<?php endforeach;?>

请注意,如果这是作为表单的一部分提交的(您提到了一个动态相关下拉列表,因此可能使用的是ajax),那么您应该听从Riggs的建议。

返回传递给函数的数组指针的当前位置。在您的示例中,您正在传入
displayName
,调用该数组时,指针在该数组中的位置始终为0,因为您没有迭代该数组。更好的解决办法是

<?php foreach($displayNames as $key => $displayName):?>
<option><?php echo $key; ?></option>
<?php endforeach;?>


请注意,如果这是作为表单的一部分提交的(您提到了一个动态相关下拉列表,因此可能您使用的是ajax),那么您应该听从里格斯的建议。

标记需要一个
值=“”
属性。只有在提交时才会返回到PHP,因此
标记需要
name=“
属性,否则在提交时不会向PHP返回任何内容。似乎您已经接受了一个只有我们才能交付的项目!但这仍然不能回答为什么数组值没有正确加载。我希望办公室名称作为键,虽然我在选择中得到5个元素,但它们都只显示零(0)^如果你“在一个可怕的时间紧缩中”,这也不是一个理想的去处。你永远不能保证得到正确的答案(或任何关于这个问题的答案),我们在这里免费提供时间。
标签需要一个
value=“”
属性。只有在提交时才会返回到PHP,因此
标记需要
name=“
属性,否则在提交时不会向PHP返回任何内容。似乎您已经接受了一个只有我们才能交付的项目!但这仍然不能回答为什么数组值没有正确加载。我希望办公室名称作为键,虽然我在选择中得到5个元素,但它们都只显示零(0)^如果你“在一个可怕的时间紧缩中”,这也不是一个理想的去处。你永远不能保证得到正确的答案(或任何关于这个问题的答案),我们在这里自由地给你时间。只要运行这个,它就工作得很好!我的印象是,它将返回指定为键的值,而不是位置。非常感谢。至少他记得要接受,甚至是投赞成票您不需要选项中的
$key
作为值吗
@riggsfully这是代码下面句子的要点。我不确定这里的具体用例是什么,OP似乎并不关心这一部分。一般来说,是的,你会想这么做的。100%要求?取决于具体情况。是的,我只是在相关用例中添加了该注释。与其说是挖苦你不如说是挖苦你刚刚运行了这个,它运行得非常好!我的印象是,它将返回指定为键的值,而不是位置。非常感谢。至少他记得要接受,甚至是投赞成票您不需要选项中的
$key
作为值吗
@riggsfully这是代码下面句子的要点。我不确定这里的具体用例是什么,OP似乎并不关心这一部分。一般来说,是的,你会想这么做的。100%要求?取决于具体情况。是的,我只是在相关用例中添加了该注释。与其说是挖苦你,不如说是挖苦你