Проверьте наличие повторяющихся элементов в массиве PHP (если не пустой) - PullRequest
2 голосов
/ 18 ноября 2010

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

$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";

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

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

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

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

Ответы [ 4 ]

8 голосов
/ 18 ноября 2010

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

if (count(array_unique(array_diff($check_post,array("")))) < count(array_diff($check_post,array(""))))  
2 голосов
/ 18 ноября 2010

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

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";
2 голосов
/ 18 ноября 2010

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

$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";
}
1 голос
/ 18 ноября 2010
if (count(array_unique(array_filter(function(x) {return !empty(x)}, $check_post)) < count($check_post))  
    echo "Duplicate";  
else  
    echo "NO Duplicate";
...