【问题标题】:php :: shorten this function? :: array manipulationphp :: 缩短这个函数? :: 数组操作
【发布时间】: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);
  }
}

【问题讨论】:

    标签: php mysql arrays function


    【解决方案1】:

    嗯,前几个步骤的一个更短的函数是:

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

    对于您的其余代码,我不太确定您要做什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-09
      • 2017-11-30
      • 2012-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多