Удаление повторяющихся данных из массива POST

Я искал ответ для этого, но никто, похоже, не помогает мне в конкретной ситуации. Я пытаюсь опубликовать список слов, а затем удалить дубликаты данных (слов), которые приходят из формы.

По какой-то причине я не могу заставить 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>

Ответы

Ответ 1

Рассмотрим сначала разделение аргументов ключевых слов пробелами, затем поиск уникальных значений:

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

Ответ 2

Возможно, вам стоит изучить использование array_filter

Таким образом вы можете определить свою собственную функцию обратного вызова для максимальной строгости своих удаленных...

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

Также: Вы пытались испортить флаги array_unique?

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

Ответ 3

Поле ваших ключевых слов настраивается как текстовое поле, поэтому при публикации вы публикуете строку. Попробуйте следующее:

$posted = $_POST['keywords'];

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

$posted = array_unique($postedKeywords);

Ответ 4

Предыдущие ответы велики, но поскольку слова вводятся в текстовое поле, разделитель будет непредсказуем. Вместо этого используйте вместо этого регулярное выражение:

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