如何删除数组中的重复值?

时间:2018-06-11 07:42:00

标签: php

我尝试了很多方法,我有一个数组:

array(1) { [0]=> string(113) "23138,19031,22951,22951,22962,18858,18858,18858,18858,18858,18858,18858,18858,18858,18858,18858,18858,18858,18858" }

尝试:

$a = array_map("unserialize", array_unique(array_map("serialize", $a)));
var_dump($a);

或者

$a = array_unique($a);
var_dump($a);

$a = array_values(array_unique($a));
var_dump($a);

没什么,我仍然得到重复的值,完整的代码将是:

$user_id = get_current_user_id();
$postid = $post->ID;
$userPosts= get_user_meta( $user_id, 'save_post', TRUE );
$userPosts = str_replace(' ', '', $userPosts);
$a = explode(', ', $userPosts);
$a = array_values(array_unique($a));
var_dump($a);
update_user_meta( $user_id, 'save_post', $a );

3 个答案:

答案 0 :(得分:3)

您应首先使用explode()从字符串构建数组:

$x = "23138,19031,22951,22951,22962,18858,18858,18858,18858,18858,18858,18858,18858,18858,18858,18858,18858,18858,18858";
print_r(array_unique(explode(',', $x)));

给出

Array
(
    [0] => 23138
    [1] => 19031
    [2] => 22951
    [4] => 22962
    [5] => 18858
)

答案 1 :(得分:0)

您的数组只包含一个值:字符串"23138,19031,22951,22951,22962,18858,18858,18858,18858,18858,18858,18858,18858,18858,18858,18858,18858,18858,18858"

您必须使用explode()函数将此字符串拆分为多个部分,然后将其结果传递给array_unique()以删除重复项:

$input = array("23138,19031,22951,22951,22962,18858,18858,18858,18858,18858,18858,18858,18858,18858,18858,18858,18858,18858,18858");

$pieces = explode(',', $input[0]);
$noDups = array_unique($pieces);

// Check the outcome
print_r($noDups);

输出结果为:

Array
(
    [0] => 23138
    [1] => 19031
    [2] => 22951
    [4] => 22962
    [5] => 18858
)

如果您需要以字符串形式返回值(以逗号分隔),则可以使用implode()

答案 2 :(得分:0)

$userPosts = str_replace(' ', '', $userPosts);
$a = explode(', ', $userPosts);

你移除空格然后你试图用comma space爆炸,但是没有空格,你只是删除它们,所以输出应该是一个项目。
您尝试删除重复项的一个长字符串不起作用。

两种可能的解决方案是删除空格 或者从爆炸中移除空间。

我建议删除空格,因为它可能不需要,因此只使用CPU。

$user_id = get_current_user_id();
$postid = $post->ID;
$userPosts= get_user_meta($user_id, 'save_post', TRUE );
$a = explode(', ', $userPosts);
$a = array_values(array_unique($a));
var_dump($a);
update_user_meta( $user_id, 'save_post', $a );

从评论编辑似乎$userPosts中没有空格,因此工作解决方案是从爆炸中删除空间。

$user_id = get_current_user_id();
$postid = $post->ID;
$userPosts= get_user_meta($user_id, 'save_post', TRUE );
$a = explode(',', $userPosts);
$a = array_values(array_unique($a));
var_dump($a);
update_user_meta( $user_id, 'save_post', $a );