【问题标题】:Looping through multiple arrays and display select options循环遍历多个数组并显示选择选项
【发布时间】:2011-05-12 21:18:54
【问题描述】:

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

这是我的代码:

                        <?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 个。因此,如果应选中 United States,它会显示 3 次,最后一次选中。

好的,对于冗长的解释很抱歉,这可能是不言自明的,但任何帮助都会很棒!

【问题讨论】:

  • 使用 in_array 或 array_search 代替嵌套的 foreach。
  • in_array 和 array_search 不起作用,因为它是数组中的数组
  • 对不起。我发誓有某种方法可以递归搜索。
  • 我想array_uintersect 可以工作,但我怀疑在这种情况下会有性能提升。

标签: php arrays loops


【解决方案1】:

这解决了它:

                        <?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>';

                            }
                        }
                    ?>

【讨论】:

    【解决方案2】:

    无论值是否设置,您的内部“foreach”语句都会输出“某物”,并且它基于在外部 foreach 循环中设置的 $country 变量。

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

    【讨论】:

    • 我该如何解决这个问题?我尝试在内循环的每个输出后添加中断,但它只选择数组中的最后一项
    • 看起来你在我忙于其他地方时解决了它。实际上,您或多或少按照我建议的方式进行了操作,使用外部布尔值作为标志来跟踪内部 foreach 循环中发生的事情。
    猜你喜欢
    • 2013-12-26
    • 1970-01-01
    • 2014-12-07
    • 2017-05-21
    • 1970-01-01
    • 2021-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多