2016-11-28 2 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

То, что вы хотите, это массив массивов, так что внутри Еогеасп добавить новый $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'. Я знаю, что это вопрос noob, но я немного новый для разработки в Интернете. – PlayHardGoPro

+0

'$ array [] = ...' толкает элемент в массив http://php.net/manual/en/function.array-push.php –

Смежные вопросы