Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查PHP数组中的重复元素(如果不是空的)_Php_Arrays_If Statement_Unique - Fatal编程技术网

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

检查PHP数组中的重复元素(如果不是空的),php,arrays,if-statement,unique,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

嗨,假设我有这个阵列:

$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";
if(计数(数组唯一($check\u post))
这很好,除了一个事实,如果多个文本区域留空(这是允许的),它会给我假

我想不考虑数组的空值为<代码>(计数(AlayAuthUnQuess))< /C> >/P> 顺便说一句,我试过使用

empty()
array\u值($check\u post)
,但我无法绕过它


提前感谢!!请询问任何需要的澄清。

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

if(计数(数组_唯一(数组_差异($check_post,数组(“”)))
if(计数(数组唯一(数组过滤器(函数(x){return!empty(x)},$check\u post))
好吧,您的方式很好,不过正如您所说,您需要先删除空条目

$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";
}
$non_empty_check_post=array_filter($check_post,create_函数(“$item”,“return!empty($item);”);
if(计数(数组唯一($non_empty_check_post))
从数组中过滤出空格:

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";
函数无空格($val){
//如果不考虑字符串“0”为空白,请不要使用
返回修剪($val)!='';
}
$check_post=array_filter($check_post,'no_blanks');
if(计数(数组唯一($check\u post))
我认为OP希望清空者贡献左边的数量,而不是右边的数量,那么他总是会得到“重复”当有空值时,我不认为这是他想要的。“乔恩,我认为OP需要空洞的密钥被忽略,这是一个简单而精彩的解决方案,这正是我想要的。非常感谢!哦,这确实更有意义。我读到了这一点:“我想要的是不要考虑数组的空值。从字面上看是+1。但当您想要删除空格(或计算结果为
false
)时,不需要向
array\u filter
提供回调函数。手册上说“如果不提供回调,则将删除所有等于false的输入项”。:)@netcoder Very true!array\u filter($check\u post)就足够了。+1.但当您想要删除空格(或计算结果为
false
)时,不需要向
array\u filter
提供回调函数。手册上说:“如果不提供回调,则将删除所有等于false的输入项。”:)@netcoder:我的回调只对空字符串进行严格检查,因为包含数字零的字符串也将被
array\u filter()
清除,这可能与OP的意图背道而驰。我在之前发布的另一个答案中使用了
array\u filter()
:)啊,我明白你在这里所做的。有意义!
$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";
}
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";