从POST阵列中删除重复数据

时间:2011-12-15 02:06:20

标签: php arrays duplicates

我一直在寻找这个问题的答案,但似乎没有一个能帮助我的具体情况。我试图发布一个单词列表,然后删除来自表单的重复数据(单词)。

出于某种原因,我似乎无法使array_unique工作。 PHP一直给我错误说我的帖子数组是一个字符串。但是,如果我尝试使用爆炸,它说我使用的是阵列。现在真的很困惑,非常沮丧。

我的代码很简单:

if(!empty($_POST['keywords']))
{
    $posted = $_POST['keywords'];

    $posted = array_unique($posted);

    echo $posted;
}

我不一定要找到确切的答案,而是一些指导,这样我才能更好地理解我在这里做错了什么。

表格:

    <form action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
    <p>
        <textarea name="keywords" rows="20" columns="120"></textarea>
    </p>

    <p>
        <input type="submit" name="submit" />
    </p>
</form>

4 个答案:

答案 0 :(得分:0)

首先考虑使用空格分割关键字参数,然后找到唯一值:

$posted = array_unique(explode(' ', str_replace("\n", ' ', $posted)));

答案 1 :(得分:0)

也许您应该考虑使用array_filter

通过这种方式,您可以定义自己的回调函数,以便最大限度地恢复您的删除...

<强> http://php.net/manual/en/function.array-filter.php

另外:您是否尝试过使用array_unique标志?

<强> http://php.net/manual/en/function.array-unique.php

答案 2 :(得分:0)

您的关键字表单字段设置为textarea,因此当您发布时,您正在发布字符串。试试这个:

$posted = $_POST['keywords'];

$postedKeywords = explode(' ', $posted);

$posted = array_unique($postedKeywords);

答案 3 :(得分:0)

之前的答案很棒,但由于这些单词正在输入到文本字段,因此分隔符将无法预测。请考虑使用正则表达式:

preg_match_all('/([^\s]+)/', $_POST['keywords'], $matches);
$unique_words = array_unique($matches[0]);