【发布时间】:2012-11-19 02:11:55
【问题描述】:
我需要根据数组中的值填充下拉列表。 这是我的代码。
假设用户的 id 为 1,2,3。然后必须选择这些 id 对应的 table_group 并显示在下拉列表中。也不应该有任何重复值,就像在这种情况下 id 2 和 3 值 23 重复一样,在这种情况下,只会采用一个值。这里的 $table_id 是从 USERS TABLE 中获取的。
$mod = explode(',',$table_id);
$mod = array('1','2','3')
$res = array();
function addItems($items, $arr) {
foreach ($items as $value) {
if (!in_array($value, $arr)) {
$arr[] = $value;
}
}
return $arr;
}
$res = array();
for ($i = $mod[0]; $i <= end($mod); $i++) {
$query = $this->db->query("SELECT table_group FROM group where table_id = '$i'");
$row = $query->row();
$grp = $row->table_group;
$group = explode(',', $grp);
$res = addItems($group, $res);
}
return $res;
它实际上可以工作,但是这里发生的错误是假设用户选择了 1,2,4。在此仅必须选择 table_group 值 1,2 和 4。但是使用我的代码,选择了 1,2,3,4 的值。如果它是 3、4、5 或 2、3、4 等,那么代码就可以正常工作。我该如何解决这个错误? 只需修改代码即可。
【问题讨论】:
-
这是一个糟糕的数据库设计。您应该通过normalizing 设计开始解决您的“问题”,之后(通常)这些类型的问题会消失或至少变得更简单
-
@Marc B:你能说得更具体点吗?你的意思是让行不包含相同的值。
-
他的意思是你不应该在字段中存储逗号分隔的值,并期望能够有效地搜索它们。 forums.phpfreaks.com/topic/…
-
@Zane Edward Dockery:如果我们用逗号分隔存储,是否可以使用explode函数将其转换为数组格式
-
理论上,是的,你可以这样做......但这样做你会创建冗余代码。想象一下为某家公司工作,而你的工作是搜索记录。你的老板没有让你访问数据库,而是递给你 99 页的文件,上面有数百人的名单。然后,您会被要求在他们最后的付款日期之前安排好他们。这很容易做到,但需要做很多工作......换句话说,当您已经可以使用这些记录时,如果数据库已正确规范化,那么您正在让 PHP 做更多的工作。
标签: php arrays codeigniter populate