循环遍历多个数组并显示选择选项

时间:2011-05-12 21:18:55

标签: php arrays loops

我有一个用于国家选择的多选框。我想选择任何相关的国家,这意味着我从数据库中得到一个数组。

这是我的代码:

                        <?php
                        foreach($countries as $country){
                            if(!empty($offer_countries)){
                                foreach($offer_countries as $key => $offer_country){
                                    if(isset($offer_country['country_id']) && ($offer_country['country_id'] == $country['id'])){
                                        echo '<option value="'.$country['id'].'" selected>'.$country['name'].'</option>';

                                    }else{
                                        echo '<option value="'.$country['id'].'">'.$country['name'].'</option>';

                                    }
                                }
                            }else{

                                echo '<option value="'.$country['id'].'">'.$country['name'].'</option>';

                            }
                        }
                    ?>

$ offer_countries数组,如下所示:

Array
(
    [0] => Array
        (
            [country_id] => 1
        )

    [1] => Array
        (
            [country_id] => 2
        )

    [2] => Array
        (
            [country_id] => 3
        )

)

我正在循环显示所有国家/地区,然后我有一个嵌套的foreach来查看该国家是否已设置,如果是,请选中该选项框。

问题在于,假设我选择了3个项目,它将根据数组中的项目数显示同一个国家/地区的3个项目。因此,如果美国应该被检查,它将显示三次,最后一次检查。

好的,对于looong的解释感到抱歉,这可能是相当自我解释的,但任何帮助都会很棒!

2 个答案:

答案 0 :(得分:2)

这解决了它:

                        <?php
                        foreach($countries as $country){
                            $i = 0;
                            if(!empty($offer_countries)){
                                foreach($offer_countries as $key => $offer_country){
                                    if($offer_country['country_id'] == $country['id']){
                                        echo '<option value="'.$country['id'].'" selected>'.$country['name'].'</option>';
                                        $i = 1;
                                        break;
                                    }
                                }
                                if($i == 0){
                                    echo '<option value="'.$country['id'].'">'.$country['name'].'</option>';
                                }
                            }else{

                                echo '<option value="'.$country['id'].'">'.$country['name'].'</option>';

                            }
                        }
                    ?>

答案 1 :(得分:0)

你的内部'foreach'语句将输出'something',无论该值是否设置,并且它是根据外部foreach循环中设置的$ country变量执行的。

所以会发生的是,每次在内部foreach循环上运行时,您在外部'foreach'循环上输出一次。