为什么array_unique不能与explode()一起使用?

时间:2011-11-20 10:43:00

标签: php explode array-unique

所以我有db table>“schools”和这个名为“metro”的表中的一列。 在“地铁”中,我有一些字符串,如“电台名称1,电台名称2,电台名称5”

我现在正在选择地铁站的搜索表单,所以我的代码如下:

<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 等等 我做错了什么? 附:对不起我的英文。

2 个答案:

答案 0 :(得分:2)

存在逻辑问题 严格来说,你不能说“array_unique不起作用” 仅仅因为涉及十几个其他功能 而且你不知道这个函数是否提供了正确的数据。

您必须学习来调试您的代码 将调试输出添加到代码中并验证每个变量的状态,以查看它是否包含所需的数据。

从循环内的var_dump($metro);开始

答案 1 :(得分: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)
);

您可以在schoolstation中的工作站创建学校。当您需要将学校链接到电台时,您可以将记录添加到metro。这使得database normalized

当您需要获取电台时,您只需执行以下操作:

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