php ::缩短这个功能? ::数组操作

时间:2010-10-03 23:20:36

标签: php mysql arrays function


所以我有一个如下详述的功能,
我相信它太长了,可以缩短 我想我已经在阵列操作部分摔倒了。
请忽略奇怪的数据库语法

<小时/> 所以基本上这个函数给出了一个像

这样的字符串
  

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(),在select查询中使用数组 这将为我们提供一个我们正在使用的不存在的所有组的数组。 ($创建)

接下来,我们遍历数组并创建组

foreach($create as $group){
  $values = array(
    'user_id', $_SESSION['user_id'],
    'group_name', $group
  );
  $this->database->insert_query($values, 'contact_groups');
}

现在我们再次执行select查询,但这次我们这样做是为了获取组的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);
  }
}

1 个答案:

答案 0 :(得分:0)

嗯,前几步的功能要短得多:

/**
 @param string like bla, bla, bla, bla,
 @return string like "bla", "bla", "bla"
*/
function blablabla($string){
    return rtrim(preg_replace('/([a-z]+)/', '"\1"', $string), ',');   
}

截至你的其他代码,我不确定你要做什么。