2016-11-28 127 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 –