2013-08-28 40 views
1

我正在为学校创建一个网站。PHP:分析变量

我有一个学生的主题保存在数据库中。

它得到保存这样的 - > 1,2,3,6,7

这意味着学生X做主题ID 1,2,3,6,7

受试者从一个学生从一个数据库返回一个变量$ subjects 我想输出主题名称(主题名称也存储在数据库中)。 但是由于在$科目中返回的变量不是一个主题,而是多个,所以我无法搜索主题名称。是否有可能将$ subject转换为一个数组,以便在我的示例中$ subjects [0]为1,$ subjects [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/爆炸) – Carsten

+3

您可以直接获取数据库本身的名称,但要发生这种情况,您必须通过为学生和学科之间的N对M关系创建连接表来规范模式。谷歌一点。 – Jon

+0

@Carsten似乎这样做!谢啦! – 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