2017-12-07 4 views
0

私は、チェックボックスのフィールドに重力のフォームを入力する次のコードを持っています。私はfield_idsの配列を持っています。私はforeachループでループしています。 $arr = array(5, 6, 7, 8, 9);私は、データベースからデータを取得しているクエリで2番目のforeachループを持っています。以前の配列の値が新しいループで持ち越されるのはなぜですか?

しかし、コードは動作していますが、その後はそれぞれfield_idがそのfield_idとそれ以前の結果を表示しています。例えばfield_id=6は、field_id=5field_id=6のチェックボックスフィールドのリストを示しています。 field_id= 7field_id=5field_id=6field_id=7のチェックボックスフィールドのリストを示しているなど

function populate_checkboxes($form){ 

    foreach($form['fields'] as &$field) { 
     $arr = array(5, 6, 7, 8, 9); 

     foreach($arr as $field_id){ 
      global $wpdb; 
      $query = $wpdb->get_results("SELECT sefer FROM bulk_import where field_id_select_items = {$field_id}"); 
      foreach($query as $sefer){ 

      if ($field->id != $field_id) {continue;} 
      $choices[] = array('text' => 'Select All', 'value' => 'Select_all'); 
      $inputs[] = array('label' => 'Select All', 'id' => '1'); 
      //get all $sefer values 
      $posts = get_posts(array(
      'post_type'=> array('learning_item'), 'suppress_filters' => 0, 'posts_per_page' => -1, 'order' => 'asc', 
      'meta_query' => array( 
       array('key' => 'taken', 'value' => '0'), 
       array('key' => 'torah', 'value' => $sefer -> sefer) 
      ), 
      )); 

      $input_id = 2; 
      foreach($posts as $post) { 
       //skipping index that are multiples of 10 (multiples of 10 create problems as the input IDs) 
       if ($input_id % 10 == 0) {$input_id++;} 
       $choices[] = array('text' => $post->post_title, 'value' => $post->post_title); 
       $inputs[] = array('label' => $post->post_title, 'id' => "{$field_id}.{$input_id}"); 

       $input_id++; 
      } 

      $field->choices = $choices; 
      $field->inputs = $inputs; 

      } 
      //reset query here? 
      wp_reset_query(); 
     } 

    } 
    return $form;} 

私は、配列のどこかに空にするための変数を設定する必要がありますか?データのキャリースルーが発生するのはなぜですか?特定のfield_idに接続されている値のみを表示するにはどうすればよいですか?

答えて

1

各ループの始めに、値をビルドする配列をリセットする必要があります。 ...

foreach($query as $sefer){ 
     $choices = array(); 
     $inputs = array(); 

     if ($field->id != $field_id) {continue;} 

リセットしない限り、以前のループの値はそのまま残ります。

関連する問題