2013-12-03 3 views
1

У меня есть таблица базы данных с двумя полями subject_id и teacher_id. В поле subject_id находятся числа, представляющие такие предметы, как математика, наука, английский. Поля teacher_id представляют различные учителя. Их присутствие в одном ряду означает, что учитель 1 преподает предмет 2 или в другом ряду, учитель 1 учит субъекту 5 или другому учителю строк 4 учит предмет 2 и т. Д. Это много-ко многим отношения.печать формата многомерного массива из таблицы базы данных

После запроса из базы данных, я получаю массив этой структуры:

Array 
(
[0] => Array 
    (
     [first_name] => bob 
     [subject_en_name] => italian 
    ) 

[1] => Array 
    (
     [first_name] => bob 
     [subject_en_name] => japanese 
    ) 

[2] => Array 
    (
     [first_name] => bob 
     [subject_en_name] => korean 
    ) 

[3] => Array 
    (
     [first_name] => sally 
     [subject_en_name] => math 
    ) 

[4] => Array 
    (
     [first_name] => sally 
     [subject_en_name] => GMAT 
    ) 

)

Мне нужно экранировать для первого имени, и распечатать фразу как:

Bob teaches italian, japanese, korean... 
Sally teaches math, GMAT... 

Использование Еогеасп строительство

foreach ($teacher_object as $t_object) 
{ 
    echo $t_object['first_name'] . " teaches " . $t_object['subject_en_name'] . "<br>"; 

} 

Я только был в состоянии управлять этими распечатками:

bob teaches italian 
bob teaches japanese 
bob teaches korean 
sally teaches math 
sally teaches GMAT 

Есть функция PHP для сортировки массива, который может помочь мне? Другое решение?

ответ

4

Перестановки вашего массива первой, так что у вас есть новый массив с именами учителей, как индекс, а классы в качестве подрешетки:

$teaches = array(); 
foreach ($teacher_object as $t_object) { 
    $teaches[$t_object['first_name']][] = $t_object['subject_en_name']; 
} 

Нового массив будет выглядеть следующим образом:

Array 
(
    [bob] => Array 
     (
      [0] => italian 
      [1] => japanese 
      [2] => korean 
     ) 

    [sally] => Array 
     (
      [0] => math 
      [1] => GMAT 
     ) 

) 

Теперь у вас есть намного более простой массив, чтобы пройти. Что-то вроде этого:

foreach($teaches AS $teacher => $classes) { 
    echo $teacher . " teaches " . implode(", ",$classes) . "<br/>"; 
} 

Дает ...

bob teaches italian, japanese, korean 
sally teaches math, GMAT 
+0

писал один и тот же код. Также есть опечатка: implode – Patrick

+0

@Patrick fixo fix – jszobody

+0

@jszobody отлично работает, спасибо! – compguy24

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