Удалить дубликаты данных из массива POST - PullRequest
0 голосов
/ 15 декабря 2011

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

По какой-то причине я не могу заставить работать array_unique. PHP продолжает выдавать мне ошибки, говоря, что мой массив записей является строкой. Но если я пытаюсь использовать 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>

Ответы [ 4 ]

0 голосов
/ 15 декабря 2011

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

preg_match_all('/([^\s]+)/', $_POST['keywords'], $matches);
$unique_words = array_unique($matches[0]);
0 голосов
/ 15 декабря 2011

Может быть, вам стоит использовать array_filter

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

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

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

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

0 голосов
/ 15 декабря 2011

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

$posted = $_POST['keywords'];

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

$posted = array_unique($postedKeywords);
0 голосов
/ 15 декабря 2011

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

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