检查PHP数组中的重复元素(如果不是空的)

时间:2010-11-18 20:01:00

标签: php arrays if-statement unique

嗨,我想说我有这个阵列:

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

哪个工作正常,除非事实上如果多一个textarea留空(允许),它就会给我带来错误。

我想要的是不考虑(count(array_unique())

的数组的空值

BTW我尝试过使用empty()array_values($check_post),但我无法绕过它。

提前致谢!!请询问任何必要的澄清。

4 个答案:

答案 0 :(得分:8)

要从比较中删除所有空值,您可以添加array_diff()

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

答案 1 :(得分:2)

你的方式很好,但正如你所说,你需要先删除空条目。

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

答案 2 :(得分:2)

过滤掉阵列中的空白:

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

答案 3 :(得分:1)

if (count(array_unique(array_filter(function(x) {return !empty(x)}, $check_post)) < count($check_post))  
    echo "Duplicate";  
else  
    echo "NO Duplicate";