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