2016-11-28 3 views
1

連想配列にフィードしようとしていますが、常に最後に挿入された値しか保持しません。連想配列をループで返す

$turmas = array(
     'cod_disciplina' => '', 
     'cod_turma'  => '', 
     'hr_inicio'  => '', 
     'hr_fim'   => '', 
     'dia_semana'  => '' 
     ); 

foreach($temp as $t) 
     { 
      $result = Horario::select('cod_disciplina', 'cod_turma', 'hr_inicio', 'hr_fim', 'dia_semana') 
      ->where('cod_disciplina', $t->cod_disciplina) 
      ->where('cod_turma', $t->cod_turma) 
      ->where('ano_semestre', $ano_semestre)->get(); 

      foreach($result as $r) 
      { 
       $turmas['cod_disciplina'] = $r->cod_disciplina; 
       $turmas['cod_turma'] = $r->cod_turma; 
       $turmas['hr_inicio'] = $r->hr_inicio; 
       $turmas['hr_fim'] = $r->hr_fim; 
       $turmas['dia_semana'] = $r->dia_semana; 

      }    
     } 

アレイ$turmasは、常に最後の挿入のみを保持します。私はそれが上書きされていることを知っていますが、私はそれを修正する方法を知らない。

これは私が最終結果として期待している例です。何をしたい

Array 
(
    [0] => Array 
     (
      [cod_disciplina] => DPS1000 
      [cod_turma] => 11 
      [hr_inicio] => 15:30:00 
      [hr_fim] => 17:30:00 
      [dia_semana] => Terça-feira 
     ) 

    [1] => Array 
     (
      [cod_disciplina] => DPS1000 
      [cod_turma] => 11 
      [hr_inicio] => 13:30:00 
      [hr_fim] => 15:30:00 
      [dia_semana] => Quarta-feira 
     ) 

    [2] => Array 
     (
      [cod_disciplina] => DPS1002 
      [cod_turma] => 10 
      [hr_inicio] => 08:30:00 
      [hr_fim] => 12:30:00 
      [dia_semana] => Quarta-feira 
     ) 

    [3] => Array 
     (
      [cod_disciplina] => DPS1003 
      [cod_turma] => 10 
      [hr_inicio] => 07:30:00 
      [hr_fim] => 09:30:00 
      [dia_semana] => Segunda-feira 
     ) 

    [4] => Array 
     (
      [cod_disciplina] => DPS1003 
      [cod_turma] => 10 
      [hr_inicio] => 10:30:00 
      [hr_fim] => 10:30:00 
      [dia_semana] => Segunda-feira 
     ) 

) 
+1

最後の値を保持するために値を何度も置き換えているためです。 – Irvin

+0

さて、各反復で配列の値を上書きするので、おそらくこのようなことをしたいと思うでしょう: '$ turmas [] cod_disciplina"] = $ r-> cod_disciplina; ' – Rizier123

+0

' $ turmas'は配列です。そのループのたびにその内容を上書きします。あなたはそれがループの終わりに含まれることを望みますか? – Chris

答えて

2

は、配列の配列であるので、あなたのforeachの内$turmas配列に新しい$turma配列を付加します。

$turmas = []; 

foreach($temp as $t) { 
    $result = Horario::select('cod_disciplina', 'cod_turma', 'hr_inicio', 'hr_fim', 'dia_semana') 
    ->where('cod_disciplina', $t->cod_disciplina) 
    ->where('cod_turma', $t->cod_turma) 
    ->where('ano_semestre', $ano_semestre)->get(); 

    foreach($result as $r) { 
     $turma = []; 
     $turma['cod_disciplina'] = $r->cod_disciplina; 
     $turma['cod_turma'] = $r->cod_turma; 
     $turma['hr_inicio'] = $r->hr_inicio; 
     $turma['hr_fim'] = $r->hr_fim; 
     $turma['dia_semana'] = $r->dia_semana; 
     $turmas[] = $turma; 
    } 
} 
+2

説明のないコードダンプはめったに役に立ちません。文脈を追加するためにあなたの答えを編集してください。あなたのコードがなぜ機能し、OPがなぜそうでないのかを説明してください。 ($ tmp'という変数を呼び出すことをお勧めします。その名前はほとんど意味がありません。 '$ turma'についてどうですか?) – Chris

+0

これはうまくいってくれました。 @Chrisが述べたように、なぜこの$ turmas [] = $ turma;が '$ turmas'の中に新しい配列を作成するのか説明できますか? – PlayHardGoPro

+0

'$ array [] = ...'は要素を配列にプッシュしますhttp://php.net/manual/en/function.array-push.php –