php :: bu işlevi kısaltabilir?

0 Cevap php


So I have a function as detailed below,
I believe it is too long and can be shortened.
I think I have fallen over in the array manipulation part.
Please ignore the strange database syntax


So basically this function is given a string like this

abc, def, ghi, jkl, MNO

nedeniyle bazı hataları için ekstra bir , ile alınabilir böylece o kadar biter

abc, def, ghi, jkl, MNO,

Bu gibi görünüyor bu yüzden işlevi dize dönüştürmek gerekir

'Abc', 'def', 'ghi', 'jkl', 'mno' ($ gruplar)

Dize daha sonra bir seçme sorgusu kullanılır

Group_name IN ($ gruplar) contact_groups KAYNAKLANAN adıyla SEÇİN group_name;

We use array_diff() on the original array and the array from the select query.
This will give us an array of all the groups that we are using that do not exist. ($create)

Sonraki dizi üzerinde döngü Biz ve grupları oluşturmak

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

Şimdi tekrar seçme sorgusu yapmak, ama bu kez biz grupların id almak için bunu

, Contact_groups ($ gruplar) IN group_name DAN id olarak group_id SEÇİMİ

Ve nihayet grup kimliği yıllardan üzerinde döngü biz ve başka bir tabloya ekleyebilirsiniz.


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);
  }
}

0 Cevap