Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Проверить наличие повторяющихся элементов в массиве PHP (если он не пустой)

Автор вопроса: TrufaОтветов: 3

Привет, допустим, у меня есть этот массив:

$check_post = array(

 $_POST["a_post"],
 $_POST["b_post"],
 $_POST["c_post"],
 $_POST["d_post"],
 $_POST["e_post"],
 $_POST["f_post"],
 $_POST["g_post"],
 $_POST["h_post"],
 $_POST["i_post"]

 );

Я хочу проверить, повторяются ли какие-либо элементы этого массива, поэтому лучшее, что у меня есть, это:

if (count(array_unique($check_post)) < count($check_post))
    echo "Duplicate";
else
    echo "NO Duplicate";

Что отлично работает, за исключением того факта, что если больше одного текстового поля остается пустым (что разрешено), это дает мне ЛОЖЬ.

Я хочу НЕ рассматривать пустые значения массива для (count(array_unique())

Кстати, я пробовал с empty() и с array_values($check_post), но не могу обойти это.

Заранее спасибо!! пожалуйста, обратитесь за любыми необходимыми разъяснениями.

arraysphpif-statementunique

Ответы

Ответ 1 · рейтинг 9 · AndreKR

Чтобы удалить все пустые значения из сравнения, вы можете добавить array_diff():

if (count(array_unique(array_diff($check_post,array("")))) < count(array_diff($check_post,array(""))))

Ответ 2 · рейтинг 2 · Orbling

Хорошо, как у вас есть, хотя, как вы говорите, вам нужно сначала удалить пустые записи.

$non_empty_check_post = array_filter($check_post, create_function('$item', 'return !empty($item);');

if (count(array_unique($non_empty_check_post)) < count($non_empty_check_post)) {
    echo "Duplicate";
} else {
    echo "NO Duplicate";
}

Ответ 3 · рейтинг 2 · BoltClock

Отфильтруйте пробелы из вашего массива:

function no_blanks($val) {
    // Do not use empty() here if you don't consider the string "0" as blank
    return trim($val) !== '';
}

$check_post = array_filter($check_post, 'no_blanks');

if (count(array_unique($check_post)) < count($check_post))
    echo "Duplicate";
else
    echo "NO Duplicate";

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы