2016-11-28 188 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內新$turma數組追加到$turmas陣列。

$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'內創建了一個新數組。'我知道這不是問題,但我對web開發很陌生。 – PlayHardGoPro

+0

'$ array [] = ...'將元素推入數組http://php.net/manual/en/function.array-push.php –