2016-11-13 5 views
0

PHPを学習して連想配列を作成する。既存の連想配列にSQLを追加する

アクティビティを記述する連想配列を作成しようとしています。この例のための活動は、354と355

である。これは私の現在のコードです:

$query = $db->prepare('SELECT item_id FROM kh_program_item_info WHERE '. $where); 
    $query->execute(); 
    if($query->rowCount() > 0){ 
     while($john = $query->fetch(PDO::FETCH_OBJ)){ 
      $key1 = $john->item_id; 
      $report-> $key1= array(); 
     } 


     foreach ($report as $key=>$johnval) { 

      $where = 'item_id = ' . $key;  
      $query = $db->prepare('SELECT activity_desc, DATE_FORMAT(activity_date,"%d/%m/%Y") AS activityDate FROM kh_program_items WHERE '. $where); 
      $query->execute(); 
      $results = $query->fetch(PDO::FETCH_OBJ); 
      $report->$key = $results; 


      echo '<pre>'; 
      echo print_r($report); 
      echo '</pre>';   


     } 

    } else { 
     echo '<p>there are no activities</p>'; 
    } 

この結果が得られます。

私は今、私は、コードを再訪し、ここに新しいコードでいる354と355
のためのより多くの情報を追加しようとしています
stdClass Object 
(
    [354] => stdClass Object 
     (
      [activity_desc] => <p>Send Activity</p> 
      [activityDate] => 08/11/2016 
     ) 

    [355] => stdClass Object 
     (
      [activity_desc] => <p>Send Activity 2</p> 
      [activityDate] => 11/11/2016 
     ) 

) 

$query = $db->prepare('SELECT item_id FROM kh_program_item_info WHERE '. $where); 
    $query->execute(); 
    if($query->rowCount() > 0){ 
     while($john = $query->fetch(PDO::FETCH_OBJ)){ 
      $key1 = $john->item_id; 
      $report-> $key1= array(); 
     } 


     foreach ($report as $key=>$johnval) { 

      $where = 'item_id = ' . $key;  
      $query = $db->prepare('SELECT activity_desc, DATE_FORMAT(activity_date,"%d/%m/%Y") AS activityDate FROM kh_program_items WHERE '. $where); 
      $query->execute(); 
      $results = $query->fetch(PDO::FETCH_OBJ); 
      $report->$key = $results; 

      $query = $db->prepare('SELECT info_value FROM kh_program_item_info WHERE '. $where .' AND info_type="program_category"'); 
      $query->execute(); 
      $info_value = $query->fetch(PDO::FETCH_OBJ); 

      $where = 'category_id = ' . $info_value->info_value; 
      $query = $db->prepare('SELECT category_name FROM kh_program_categories WHERE '. $where); 
      $query->execute(); 
      $actcategories = $query->fetch(PDO::FETCH_OBJ); 

      $report->$key = $actcategories;   

      echo '<pre>'; 
      echo print_r($report); 
      echo '</pre>';   
     } 

    } else { 
     echo '<p>there are no activities</p>'; 
    } 

これは明らかに私が作成し、歩留まりたものが上書きされます以下の結果が得られます。

stdClass Object 
(
    [354] => stdClass Object 
     (
      [category_name] => Parent Input 
     ) 

    [355] => stdClass Object 
     (
      [category_name] => Children's Menu 
     ) 

) 

問題は$myactivity->$key = $actcategories;です。

情報を上書きせずに最後に追加するにはどうすればよいですか?

私はこの結果を事前に

stdClass Object 
    (
     [354] => stdClass Object 
      (
       [activity_desc] => <p>Send Activity</p> 
       [activityDate] => 08/11/2016 
       [category_name] => Parent Input 
      ) 

     [355] => stdClass Object 
      (
       [activity_desc] => <p>Send Activity 2</p> 
       [activityDate] => 11/11/2016 
       [category_name] => Children's Menu 
      ) 

    ) 

感謝を得るために必要があります。

答えて

0

まず配列を作成してからオブジェクトに送信する必要があります。

すなわち:

foreach ($report as $key=>$johnval) { 

     $where = 'item_id = ' . $key;  
     $query = $db->prepare('SELECT activity_desc, DATE_FORMAT(activity_date,"%d/%m/%Y") AS activityDate FROM kh_program_items WHERE '. $where); 
     $query->execute(); 
     // build first array 
     $result_first_query = $query->fetch(PDO::FETCH_OBJ); 

     $query = $db->prepare('SELECT info_value FROM kh_program_item_info WHERE '. $where .' AND info_type="program_category"'); 
     $query->execute(); 
     $info_value = $query->fetch(PDO::FETCH_OBJ); 

     $where = 'category_id = ' . $info_value->info_value; 
     $query = $db->prepare('SELECT category_name FROM kh_program_categories WHERE '. $where); 
     $query->execute(); 
     // build second array 
     $result_second_query = $query->fetch(PDO::FETCH_OBJ); 

     // put them together in $report->$key 
     $report->$key = $result_first_query + $result_second_query;   

     echo '<pre>'; 
     print_r($report); 
     echo '</pre>';   
    } 

はそれがお役に立てば幸いです。

+0

私は申し訳ありませんが、私の悪い、2番目のクエリにタイプミスがあった – fugz

+0

(=押したりマージcouldntの。代わりに「$結果」の「$結果」を試してみてください。 – JazZ

+0

はそれが – fugz

0

私はfetch_assocを使った後にプッシュすることができました。

私はそれがちょうどそれがdidntのフォーマットだったと思うが、ありがとう。

関連する問題