2010-10-03 89 views
0


所以我有一個功能,詳細如下,
我相信它太長,可以縮短。
我想我已經在陣列操縱部分墮落了。
請忽略怪數據庫語法php ::縮短此功能? ::數組操作


所以基本上這個功能被賦予這樣

ABC字符串,DEF,GHI,JKL,MNO

由於一些毛刺它可與額外,被接收,以便它最終爲

ABC,DEF,GHI,JKL,MNO,

函數必須轉換爲字符串,它看起來像

'ABC', '高清', 'GHI', 'JKL' 'MNO'($組)

的字符串,然後在選擇查詢中使用

SELECT組名的名字從contact_groups WHER E 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'); 
} 

現在我們再做一次選擇查詢,但這個時候,我們這樣做是爲了獲得各組的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); 
    } 
} 

回答

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

當你的代碼的其餘部分,我真的不知道你想什麼做。