2017-04-01 138 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个数组,我用逗号分隔的列表进行了转换,我完全搞错了。你的答案就像一个魅力。 –