Поэтому у меня есть функция, как описано ниже,
Я считаю, что он слишком длинный и может быть сокращен.
Я думаю, что я упал в части манипуляции массивом.
Пожалуйста, игнорируйте странный синтаксис базы данных
abc, def, ghi, jkl, mno
из-за некоторых сбоев он может быть получен с дополнительным ,
, поэтому он заканчивается как
abc, def, ghi, jkl, mno,
Функция должна преобразовать строку так, чтобы она выглядела как
'abc', 'def', 'ghi', 'jkl', 'mno' ($ groups)
Затем строка используется в запросе select
SELECT имя_группы как имя FROM contact_groups WHERE group_name IN ($ groups);
Мы используем array_diff()
в исходном массиве и в массиве из запроса select.
Это даст нам массив всех групп, которые мы используем, которых не существует. ($ Создать)
Далее мы перебираем массив и создаем группы
foreach($create as $group){
$values = array(
'user_id', $_SESSION['user_id'],
'group_name', $group
);
$this->database->insert_query($values, 'contact_groups');
}
Теперь мы снова выполняем запрос выбора, но на этот раз мы делаем это, чтобы получить идентификатор групп
SELECT group_id как id FROM contact_groups WHERE group_name IN ($ groups);
И, наконец, мы перебираем идентификатор группы и добавляем их в другую таблицу.
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);
}
}
Ну, гораздо более короткая функция для первых нескольких шагов:
/**
@param string like bla, bla, bla, bla,
@return string like "bla", "bla", "bla"
*/
function blablabla($string){
return rtrim(preg_replace('/([a-z]+)/', '"\1"', $string), ',');
}
Что касается остальной части вашего кода, я не совсем уверен, что вы пытаетесь сделать.