2013-08-28 90 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