2011-05-12 95 views
0

我有用于国家选择的多选框。我想选择任何关联的国家,这意味着我从数据库中获得的数组。通过多个阵列循环并显示选择选项

这里是我的代码:

     <?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解释抱歉,这可能是相当自我解释,但任何帮助将是真棒!

+0

使用in_array或array_search代替嵌套的foreach。 – 2011-05-12 21:25:03

+1

in_array和array_search不会工作,因为它是数组 – dzm 2011-05-12 21:42:31

+0

中的数组。我发誓有一些方法递归搜索。 – 2011-05-12 22:00:19

回答

0

您的内部'foreach'语句将输出'something'是否设置值,并且它基于外部foreach循环中设置的$ country变量。

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

+0

我该如何解决这个问题?我在内循环中的每个输出之后尝试添加中断,但是它只会选择数组中的最后一个项目 – dzm 2011-05-12 21:41:00

+0

看起来像我在其他地方忙时解决它。你实际上是按照我所建议的方式做了它,使用外部布尔值作为标志来跟踪内部foreach循环内发生的事情。 – RonLugge 2011-05-13 01:24:55

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

          } 
         } 
        ?>