Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从POST数组中删除重复数据_Php_Arrays_Duplicates - Fatal编程技术网

Php 从POST数组中删除重复数据

Php 从POST数组中删除重复数据,php,arrays,duplicates,Php,Arrays,Duplicates,我一直在寻找答案,但似乎没有一个能真正帮助我的具体情况。我试图发布一个单词列表,然后删除表单中的重复数据(单词) 由于某些原因,我似乎无法使array_成为唯一的工作对象。PHP不断给我错误,说我的post数组是字符串。但如果我尝试使用explode,它会说我使用的是数组。现在真的很困惑,很沮丧 我的代码很简单: if(!empty($_POST['keywords'])) { $posted = $_POST['keywords']; $posted = array_uniq

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

由于某些原因,我似乎无法使array_成为唯一的工作对象。PHP不断给我错误,说我的post数组是字符串。但如果我尝试使用explode,它会说我使用的是数组。现在真的很困惑,很沮丧

我的代码很简单:

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>

首先考虑按空格拆分关键字参数,然后查找唯一值:

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

也许你应该考虑使用数组过滤器

这样,您就可以定义自己的回调函数,以最大程度地严格执行删除操作

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

还有:你有没有试过摆弄数组的唯一标志


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

您的关键字表单字段设置为文本区域,因此当您发布时,您发布的是一个字符串。试试这个:

$posted = $_POST['keywords'];

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

$posted = array_unique($postedKeywords);

前面的答案很好,但是因为单词是输入到文本字段的,所以分隔符是不可预测的。考虑使用正则表达式代替:

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

…而且,当回显结果时,变量$posted是一个数组,因此要查看它的值,可以回显print_r($posted,true)’(或者简单地回显print_r($posted)’嘿,Nathan,我试过了,得到了以下结果:数组([0]=>test)…就像它仍然将其称为字符串一样。我想象textarea值包含一个新行--尝试此修订版,它首先将新行转换为空格。很好,谢谢!我也添加了一个返回。新行确实做了更改,但它仍然没有删除副本。现在它的工作方式是:
code
$posted=array\u unique(explode(“”,str_replace(“\r\n”,“”,$posted));所以我尝试了这个方法并使用了print_r。我尝试了测试2x,结果如下:Array([0]=>test test)@714nighter:可能有很多非空格字符。尝试一下Ayman的解决方案,因为正则表达式会更健壮。谢谢,它看起来像是非空格字符。我很感激!)我没有尝试过任何标志,因为我只是在慢慢地建立它。我现在似乎根本无法删除任何重复的标志。我会查看标志。谢谢!艾曼,我刚刚尝试了这个,它也很有效。谢谢你的想法!我刚刚意识到这有一个问题。因为它删除了空格,所以它也会用空格转换任何单词(即ayman safadi)转换成多个单词。同样的情况也会发生在:explode(“”,$\u POST['keywords'))您可以指导用户使用逗号或换行符。或者想出一些奇特的前端解决方案,以确保用户正确输入单词。是的,我现在看到了。这两种方法都适用于不带空格的单个单词,但将带空格的单词转换为单独的单词。@714nighter-只是想确保您阅读我编辑的评论。