使用多个foreach循环显示所选数据

时间:2017-09-19 04:38:50

标签: javascript php arrays foreach

这是动态代码

<?php
    if(isset($_POST['submit'])){
        $option = $_POST['option']; 
        $suboption = $_POST['suboption'];
        foreach($option as $opt){
            foreach($suboption as $sub){
                echo "<pre>";
                print_r($opt);
                echo "<br>";
                print_r($sub);  
                echo "</pre>";
            }   
        }
    }
?>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
<input type="checkbox" name="option[]" value="Option 1"> Option 1<br>
<select name="suboption[]" multiple="multiple">
  <option value="Suboption 1">Suboption 1</option>
  <option value="Suboption 2">Suboption 2</option>
  <option value="Suboption 3">Suboption 3</option>
</select>
<br>


<input type="checkbox" name="option[]" value="Option 2"> Option 2<br>

<select name="suboption[]" multiple="multiple">
  <option value="Suboption 1">Suboption 1</option>
  <option value="Suboption 2">Suboption 2</option>
  <option value="Suboption 3">Suboption 3</option>
</select>
<br>

<input type="checkbox" name="option[]" value="Option 3"> Option 3<br>

<select name="suboption[]" multiple="multiple">
  <option value="Suboption 1">Suboption 1</option>
  <option value="Suboption 2">Suboption 2</option>
  <option value="Suboption 3">Suboption 3</option>
</select><br>
<input type="submit" name="submit">
</form>

现在如果我选择带有多个子选项的多选项,则显示

  

我选择选项1,子选项1或2,选项2选择子选项2或3

输出

Option 1
Suboption 1
Option 1
Suboption 2
Option 1
Suboption 2
Option 1
Suboption 3
Option 2
Suboption 1
Option 2
Suboption 2
Option 2
Suboption 2
Option 2
Suboption 3

但我想

Option 1
Suboption 1 
Option 1
Suboption 2
Option 2
Suboption 2
Option 2
Suboption 3

如果我选择带有多个子选项的任何一个选项,那么输出是正确的

  

例如

     

我选择选项1,子选项1或2

输出

Option 1
Suboption 1 
Option 1
Suboption 2 

请解决此问题

2 个答案:

答案 0 :(得分:0)

当您在未选中选项1复选框的情况下发布数据并且选择了任何子选项时,它将发布该数据。所以你需要使用jQuery来启用或禁用特定的选择框,否则它会发布甚至不需要的数据。

在前端验证之前,使用嵌套循环也无法解决此问题。

答案 1 :(得分:0)

使用子选项中的值将每个子选项与选项相关联。而不是suboption []你可以为每个子选项[]使用唯一的名称,但你需要相应地改变你的php。

在HTML更改中

<select name="suboption[]" multiple="multiple">

<select name="suboption[Option 3][]" multiple="multiple">

在Php中使用以下

if(isset($_POST['submit'])){

    $option = $_POST['option']; 
    $suboption = $_POST['suboption'];

    echo "<pre>";
    foreach($option as $opt){

        foreach($suboption[$opt] as $sub ){
            echo '<br/>';
            print_r($opt);
            echo "<br>";
            print_r($sub);  
        }   
    }
    echo "</pre>";
}

完整代码

<?php
    if(isset($_POST['submit'])){

        $option = $_POST['option']; 
        $suboption = $_POST['suboption'];

        echo "<pre>";
        foreach($option as $opt){

            foreach($suboption[$opt] as $sub ){
                echo '<br/>';
                print_r($opt);


                    echo "<br>";
                    print_r($sub);  


            }   
        }
        echo "</pre>";
    }
?>

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
<input type="checkbox" name="option[]" value="Option 1"> Option 1<br>
<select name="suboption[Option 1][]" multiple="multiple">
  <option value="Suboption 1">Suboption 1</option>
  <option value="Suboption 2">Suboption 2</option>
  <option value="Suboption 3">Suboption 3</option>
</select>
<br>


<input type="checkbox" name="option[]" value="Option 2"> Option 2<br>

<select name="suboption[Option 2][]" multiple="multiple">
  <option value="Suboption 1">Suboption 1</option>
  <option value="Suboption 2">Suboption 2</option>
  <option value="Suboption 3">Suboption 3</option>
</select>
<br>

<input type="checkbox" name="option[]" value="Option 3"> Option 3<br>

<select name="suboption[Option 3][]" multiple="multiple">
  <option value="Suboption 1">Suboption 1</option>
  <option value="Suboption 2">Suboption 2</option>
  <option value="Suboption 3">Suboption 3</option>
</select><br>
<input type="submit" name="submit">
</form>