2017-04-01 190 views
0

如何從逗號分隔的列表中將逗號分隔的列表中的值從其他逗號分隔的列表中的其他值中刪除將逗號分隔列表中的值從其他逗號分隔的列表中刪除

我有這樣的2陣列:

$users_list = '1, 2, 3'; 

$users_list_2 = '1, 2'; 

我想有此最終結果:

$final_users_list = '1,2'; 

我使用

$final_users_list = array_diff($users_list, $users_list_2); 

但結果是空

我按照這個例子: http://php.net/manual/en/function.array-diff.php

$array1 = array("a" => "green", "red", "blue", "red"); 
$array2 = array("b" => "green", "yellow", "red"); 
$result = array_diff($array1, $array2); 

print_r($result); 

Array 
(
    [1] => blue 
) 
+0

在你的榜樣,$ users_list和$ users_list_2是字符串數組沒有。 array_diff函數不能使用字符串。 – Jouby

+0

在array_diff或array_intersect你必須使用數組而不是字符串..所以你必須convertn你的字符串在適當的數組..(和重建後的字符串) – scaisEdge

+0

是的,我犯了一個大錯誤。我之前有2個數組,我用逗號分隔列表進行了轉換,我完全錯了。 –

回答

3

首先,$users_list$users_list_2陣列。他們是字符串。爲了讓我們的陣列你需要explode這些字符串,

其次 - 找到存在於中的元素數組 - 使用array_intersect

簡體最終代碼:

$users_list = '1, 2, 3'; 
$users_list_2 = '1, 2'; 
$final_users_list = array_intersect(
    explode(',', $users_list), 
    explode(',', $users_list_2) 
); 
echo'<pre>',print_r($final_users_list),'</pre>'; 
// or as a string 
echo implode(',', $final_users_list); 

最後,如果你輸出數組從explodevar_dump,你會看到這個數組的值有空格。這些空間可以影響進一步的比較,所以最好用array_maptrim刪除它們,例如:

$users_list = '1, 2, 3'; 
$users_list_array = array_map('trim', explode(',', $users_list)); 

$users_list_2 = '1, 2'; 
$users_list_2_array = array_map('trim', explode(',', $users_list_2)); 

$final_users_list = array_intersect($users_list_array, $users_list_2_array); 
echo'<pre>',print_r($final_users_list),'</pre>'; 
echo implode(',', $final_users_list); 
+0

我之前有2個數組,我用逗號分隔的列表進行了轉換,我完全搞錯了。你的答案就像一個魅力。 –