2013-08-28 2 views
1

Я создаю сайт для школы.PHP: проанализировать переменную

У меня есть предметы студента, сохраненные в базе данных.

Это спасаются, как это -> 1,2,3,6,7

Это означает, что студент X делает предмет ID 1,2,3, 6 и 7

Субъектами от одного студента получить из базы данных в одной переменной $ subject Я хотел бы вывести имя субъекта (имена объектов также хранятся в базе данных). Но поскольку переменная, возвращаемая в $ subject, не одна тема, а несколько, я не могу найти имя темы. Возможно ли преобразовать $ предметов в массив, так что $ subject [0] будет 1 в моем примере, а $ subject [1] будет 2 (см. Выше @, он сохраняется таким образом).

Просто сказал: это не должно быть $ испытуемые = 1,2,3,6,7 но

$subjects[0] = 1 
$subjects[1] = 2 
$subjects[2] = 3 
$subjects[3] = 6 
$subjects[4] = 7 
+2

[ 'взрываются()'] (http://de2.php.net/ explode) – Carsten

+3

Вы можете получить базу данных непосредственно для выдачи имен напрямую, но для этого вы должны нормализовать схему, создав таблицу соединений для отношений между учениками и субъектами. Google немного. – Jon

+0

@ Карстен Это похоже на это! Спасибо чувак! – user1857116

ответ

2

Вы можете использовать explode, чтобы преобразовать строку в массив:

explode(',', $students); 

Следует отметить, однако, что взлом и последующие запросы к вашей базе данных для получения имен объектов - это очень неэффективный способ сделать это. Вместо того, чтобы хранить предметы студентов в одном поле, вы должны создать целую таблицу для этих отношений. Таким образом, в дополнение к таблице студентов и таблицы Субъекты, у вас есть отношения:

Таблица: StudentSubjects

Student | Subject 
----------------- 
    1 | 1 
    1 | 2 
    1 | 3 
    1 | 6 
    1 | 7 
    2 | 2 
    2 | 4 
    2 | 6 
    2 | 8 
    3 | 3 

Затем вы можете опрашивать базу данных и получить список предметных имен для конкретного студента, или группа студентов, по одному запросу.

0

Вы можете выбрать путь 2:

взрываются:

<?php 
$str = '1,2,3,6,7'; 
$chars = explode(',', $str); 
print_r($chars); 
?> 

или preg_split:

<?php 
$str = '1,2,3,6,7'; 
$chars = preg_split('/,/', $str, -1, PREG_SPLIT_OFFSET_CAPTURE); 
print_r($chars); 
?> 
+0

Нет причин использовать preg_split, когда достаточно будет взорваться. – Paulpro

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