2011-05-12 7 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つを表示します。だから米国をチェックする必要があるならば、それは3回表示され、最後のものがチェックされます。

ルーンの説明には申し訳ありませんが、それはおそらくかなり自明ですが、どんな助けも素晴らしいでしょう!

+0

使用in_arrayまたはネストされたのforeachの代わりにarray_search。 –

+1

in_arrayとarray_searchは配列内の配列のため動作しません – dzm

+0

残念です。私は再帰的に検索する方法があると誓った。 –

答えて

0

内側のforeach文は、値が設定されているかどうかにかかわらず、何かを出力します。foreachループの外側に設定された$ country変数に基づいています。

だから、内側のforeachループで実行されるたびに外側の 'foreach'ループに1回出力するということです。

+0

どうすれば修正できますか?私は内部ループの各出力の後にブレークを追加しようとしましたが、配列内の最後の項目のみを選択します。 – dzm

+0

他の場所で忙しい間に解決したように見えます。実際には、内側のforeachループ内で何が起こったのかを追跡するためのフラグとして外部のブール値を使用して、多かれ少なかれ提案しました。 – RonLugge

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

          } 
         } 
        ?> 
関連する問題