2011-11-20 77 views
-1

所以我有db table>「schools」,並在這個表中名爲「metro」的列。 在「地鐵」我有這樣的字符串「站名1,站名稱2,站名5」爲什麼array_unique不能和explode()一起工作?

我現在做有選擇地鐵站搜索表單,所以我的代碼看起來是這樣的:

<select name="categoryID"> 
<? 

$metro_sql=mysql_query("SELECT metro FROM schools"); 
while($metro=mysql_fetch_array($metro_sql)){ 
    $metro_pieces = explode(", ", $metro['metro']); 
     foreach (array_unique($metro_pieces, SORT_REGULAR) as $metro_all) { 
      echo "<option value=\"".$metro_all."\">".$metro_all."</option>\n "; 
    } 
} 

而結果: 地鐵站1 地鐵站2 地鐵站3 地鐵站1 地鐵站4 地鐵站5 等 我做錯了什麼? p.s.對不起我的英語不好。

+1

最有可能的問題是在字段值空間,使他們非唯一 –

+0

無關你的問題,但如果你的數據是更加正常化的,你不必像這樣處理它。將逗號分隔的數據存儲在關係數據庫中幾乎總是一個壞主意。 – Corbin

回答

1

我會提出一個更好的數據庫設計。

CREATE TABLE school (
    school_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    name VARCHAR(255) 
); 

CREATE TABLE station (
    station_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    name VARCHAR(255) 
); 

CREATE TABLE metro (
    school_id INT NOT NULL, 
    station_id INT NOT NULL, 
    UNIQUE INDEX (school_id, station_id) 
); 

您創建school學校和站station。當您需要將學校鏈接到一個電臺時,您將添加一條記錄到metro。這使得database normalized

當你再需要獲得站,你只需做一次:

SELECT station.* 
FROM metro 
INNER JOIN station 
ON metro.station_id = station.station_id 
WHERE metro.school_id = $school_id 
+0

是的,這比我更好,但是,不幸的是,我已經寫了一個代碼來查看,編輯和更新學校信息的表單。我需要花很多時間來重寫所有這些。 – user1056252

+0

稍後需要修復時,需要更多時間。設計時更容易解決問題,編碼時更難以解決問題,部署時更難以解決問題,而當必須重新編入代碼時非常困難。儘快修復錯誤總是更好 - 離開的時間越長,時間和金錢就越貴。 –

2

這是一個合乎邏輯的問題。
嚴格地說,你不能說「array_unique不起作用」。
僅僅因爲涉及其他一些功能。
而且你不知道這個功能是否提供了正確的數據。

你必須學會​​才能調試你的代碼。
將調試輸出添加到您的代碼並驗證每個變量的狀態以查看它是否包含所需的數據。從var_dump($metro);

開始內部循環的

+0

感謝您的建議,它返回布爾(錯誤) – user1056252

+0

**循環內**,而不是外面! –

+0

哎呀,在循環內沒有返回 – user1056252

相關問題