2016-02-06 146 views
1

我有這個foreach循環輸出下面的數組,我有一個高級時刻,我需要它返回一個沒有重複值的數組,我只是不可能吧。數組合並和刪除重複值

foreach ($post_groups as $post_group => $id) { 
    group = $wpdb->get_row($wpdb->prepare("SELECT * FROM $table_name WHERE ID = %d", $id), ARRAY_A); 
    $groups[$group['group_name']] = $group['group_name'] = unserialize($group['group_users']); 
} 

輸出:

array(2) { 
    ["Registered Users"]=> 
    array(1) { 
    [0]=> 
    string(1) "2" 
    } 
    ["Admin Users"]=> 
    array(2) { 
    [0]=> 
    string(1) "1" 
    [1]=> 
    string(1) "2" 
    } 
} 

乾杯

+0

使用1 SELECT語句。它將比在foreach中執行的N個語句快得多 – user4035

+0

問題不明確:您只需獲取id(例如Tom Wright示例)或者您想保留組(註冊用戶,管理員用戶等)。在這種情況下,規則是什麼?也就是說,你想在衝突情況下保存哪個組密鑰?他們有多少組? – fusion3k

+0

Tom的回答正是我想要的,我現在需要做的就是動態合併陣列,因爲可能會有大量的組而不僅僅是這兩個例子 – Journeyman73

回答

1

我相信以下是你追求的。只需將數組合並在一起,然後確保結果是唯一的。

$userIds = [ 
    'Registered Users' => array(1,2,3), 
    'Admin Users' => array(3,4,5), 
]; 

$allUserIds = array_unique(call_user_func_array('array_merge', $userIds)); 

var_dump($userIds); 
/* 
array(2) { 
    ["Registered Users"]=> 
    array(3) { 
    [0]=> 
    int(1) 
    [1]=> 
    int(2) 
    [2]=> 
    int(3) 
    } 
    ["Admin Users"]=> 
    array(3) { 
    [0]=> 
    int(3) 
    [1]=> 
    int(4) 
    [2]=> 
    int(5) 
    } 
} 
*/ 

var_dump($allUserIds); 
/* 
array(5) { 
    [0]=> 
    int(1) 
    [1]=> 
    int(2) 
    [2]=> 
    int(3) 
    [4]=> 
    int(4) 
    [5]=> 
    int(5) 
} 
*/ 
+0

抱歉,我忘記了一件事是組是動態的並可以加載它們。所以我只需要獲得數組合並位就可以了。 我現在很努力,我的大腦不能正常工作,我甚至無法確定這一點,嗯 – Journeyman73

+0

我已經更新了我的答案,因此它可以適用於任何數量的組。 –

+0

謝謝你湯姆完美的作品 – Journeyman73

-1

使用PHP函數:array_unique(array_merge())

測試代碼:

$userIds = array('RegisteredUsers' => array('A','a','b','B'),'AdminUsers' => array('C','c','B','d','a')); 

$allUserIds = array_unique(array_merge($userIds['RegisteredUsers'],  $userIds['AdminUsers'])); 
echo "<br><br>"; 

var_dump($userIds); 
var_dump($allUserIds); 
+1

是的,@TomWright在20分鐘前發佈的答案相同。你甚至設法在代碼中使用相同數量的額外空間。看起來像你複製它。做得好。 :/ – trincot

+0

Jest編輯err @ array()和文本格式只有傢伙...... K ..謝謝@trincot – OpenWebWar

+0

如果你覺得有一個這樣的小錯誤,或可以改進的格式,然後建議編輯該特別的答案,或在評論中提及它。直截了當地複製/粘貼某個人的答案,並在做出一些小改動後使其成爲自己的答案,這實際上並不尊重寫出答案的人。 – trincot