【发布时间】:2011-04-20 14:25:26
【问题描述】:
所以我有一个功能如下详述,
我认为它太长了,可以缩短。
我想我在数组操作部分已经跌倒了。
请忽略奇怪的数据库语法
所以基本上这个函数被赋予了一个这样的字符串
abc、def、ghi、jkl、mno
由于一些小故障,它可以通过额外的, 接收,所以它最终为
abc、def、ghi、jkl、mno、
该函数必须转换字符串,使其看起来像
'abc', 'def', 'ghi', 'jkl', 'mno' ($groups)
然后在选择查询中使用该字符串
SELECT group_name as name FROM contact_groups WHERE group_name IN($groups);
我们在原始数组和选择查询中的数组上使用array_diff()。
这将为我们提供一个包含我们正在使用但不存在的所有组的数组。 ($创建)
接下来我们循环遍历数组并创建组
foreach($create as $group){
$values = array(
'user_id', $_SESSION['user_id'],
'group_name', $group
);
$this->database->insert_query($values, 'contact_groups');
}
现在我们再次执行选择查询,但这次我们这样做是为了获取组的 ID
SELECT group_id as id FROM contact_groups WHERE group_name IN($groups);
最后我们遍历组 id 并将它们添加到另一个表中。
private function groups($groups){
$groups = split(', ', $groups);
$intersect = array();
$db_rows = array();
foreach($groups as &$group)
$group = trim(str_replace (',', '', $group)); //remove any rogue spaces or commas
$groupsq = $groups;
foreach($groupsq as &$group)
$group = '\''.$group.'\'';
$groupsq = implode(', ', $groupsq);
$q = "SELECT group_name as name FROM contact_groups WHERE group_name IN($groupsq);";
$r = $this->database->results($this->database->query($q));
while($row = mysql_fetch_assoc($r)) {
$intersect[] = $row;
}
//create a list of non-existent groups
$create = array_diff($groups, $intersect);
foreach($create as $group){
$values = array(
'user_id', $_SESSION['user_id'],
'group_name', $group
);
$this->database->insert_query($values, 'contact_groups');
$this->database->query($q);
}
$q = "SELECT group_id as id FROM contact_groups WHERE group_name IN($groupsq);";
$r = $this->database->results($this->database->query($q));
while($row = mysql_fetch_assoc($r)) {
$db_rows = $row;
}
foreach($db_rows as $group){
$values = array(
'group_id' => $group,
'contact_id' => $this->contact_id
);
$q = $this->database->insert_query($values, 'contact_groups_link');
$this->database->query($q);
}
}
【问题讨论】: