在另一个foreach循环中使用PHP foreach循环

时间:2018-09-21 14:32:57

标签: php sql-server foreach

我正在尝试用数据库中的行填充表。但是,列之一是一个下拉列表,需要使用多个值填充该下拉列表,因此需要使用fetchAll。但是,由于我在另一个foreach构造内部使用了一个foreach构造,因此遇到了麻烦。

我猜这是不可能的,还是我做错了什么?如何找到一种解决方法,以便既可以填充整个表,又可以使用多个值填充下拉列表,但仍将其默认设置为数据库中的值?

<?php
$sql = "SELECT TOP 100 *
        FROM Table_OS_List
        ORDER BY [CURRENT_SKU] ASC";


$drops = "SELECT [Purchasing_Group]
        FROM Table_OS_List
        GROUP BY [Purchasing_Group]";
$drop = $dbh->query($drops);
?>

<?php
    /* Foreach loop that brings in information to populate table */
    foreach ($dbh->query($sql) as $rows) {
    ?>
    <tr class="row">    
        <td class="old_sku" id="old_sku"><?php echo intval ($rows['OLD_SKU'])?></td>
        <td class="current_sku" id="current_sku"><?php echo intval ($rows['CURRENT_SKU'])?></td>
        <td class="id" id="id" style="display: none;"><?php echo intval ($rows['ID'])?></td>


        <td class="dropdown-select" id="purchgroup">
            <select id="selected_group" class="selected_group" disabled>
                <?php foreach($drop->fetchAll() as $dropdown) { ?>

                  <option class="choice" value="Purchasing Group"><?php echo $dropdown['Purchasing_Group'];?></option>

                <?php } ?>

            </select>
        </td>


        <td><input type="button" class="edit" name="edit" value="Edit"></td>
        <td><input type="button" class="delete" name="delete" id="<?php echo intval ($rows['ID'])?>" value="Delete"></td>
    </tr>
 <?php
  }
 ?>

注意 这段代码正确地填充了整个表,但是,如果我需要选择其他内容,则下拉列表仅包含每一行中的值,并且不填充其他值选项。

<?php
    /* Foreach loop that brings in information to populate table */
    foreach ($dbh->query($sql) as $rows) {
    ?>
    <tr class="row">    
        <td class="old_sku" id="old_sku"><?php echo intval ($rows['OLD_SKU'])?></td>
        <td class="current_sku" id="current_sku"><?php echo intval ($rows['CURRENT_SKU'])?></td>
        <td class="id" id="id" style="display: none;"><?php echo intval ($rows['ID'])?></td>


        <td class="dropdown-select" id="purchgroup">
            <select id="selected_group" class="selected_group" disabled>

                <option class="choice" value="Purchasing Group"><?php echo $rows['Purchasing_Group'];?></option>

            </select>
        </td>           

        <td><input type="button" class="edit" name="edit" value="Edit"></td>
        <td><input type="button" class="delete" name="delete" id="<?php echo intval ($rows['ID'])?>" value="Delete"></td>
    </tr>
 <?php
  }
 ?>

编辑:

即使该行不应为Bowling Green,每个下拉列表也会自动默认为Bowling Green。大多数行要么是东南行,要么是密歇根州,但不管是什么行,由于某种原因,它默认为Bowling Green

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:2)

是的,做错了,您正在使用外部foreach的第一次迭代完成时消耗第二个结果集,因此取而代之的是将下拉内容检索到数组中,以便您可以多次重用

<?php
$sql = "SELECT TOP 100 *
        FROM Table_OS_List
        ORDER BY [CURRENT_SKU] ASC";


$drops = "SELECT [Purchasing_Group]
        FROM Table_OS_List
        GROUP BY [Purchasing_Group]";
$drop = $dbh->query($drops);
$allDrops = $drop->fetchAll();

?>

<?php
    /* Foreach loop that brings in information to populate table */
    foreach ($dbh->query($sql) as $rows) {
    ?>
    <tr class="row">    
        <td class="old_sku" id="old_sku"><?php echo intval ($rows['OLD_SKU'])?></td>
        <td class="current_sku" id="current_sku"><?php echo intval ($rows['CURRENT_SKU'])?></td>
        <td class="id" id="id" style="display: none;"><?php echo intval ($rows['ID'])?></td>


        <td class="dropdown-select" id="purchgroup">
            <select id="selected_group" class="selected_group" disabled>
                <?php 
                foreach($allDrops as $dropdown) { 
        //--------------^^^^^^^^^
        // Also changed the way you fill the option tag below
                ?>

                  <option class="choice" 
                          value="<?php echo $dropdown['Purchasing_Group'];?>">
                    <?php echo $dropdown['Purchasing_Group'];?>
                  </option>

                <?php } ?>

            </select>
        </td>


        <td><input type="button" class="edit" name="edit" value="Edit"></td>
        <td><input type="button" class="delete" name="delete" id="<?php echo intval ($rows['ID'])?>" value="Delete"></td>
    </tr>
 <?php
  }
 ?>