我有一个for循环,我想将每个值与数组中的其他值进行比较。如果有重复项,页面将重定向。如何将值$name[$x]
与$ name数组中的其他值进行比较,无论它们是在$name[$x]
之前还是之后?
for($x=0; $x<4; $x++) {
if($name[$x] == /*Other members of $name*/) {
header("location:../error/duplicates.php");
exit;
}
}
答案 0 :(得分:3)
你为什么这样做:
for($x=0; $x<4; $x++) {
if($name[$x] == /*Other members of array*/) {
header("location:../error/duplicates.php");
exit;
}
}
当您可以使用array_unique
时:
if (count(array_unique($name)) < count($name)) {
header("location:../error/duplicates.php");
exit;
}
逻辑基本上是,array_unique
告诉你阵列中有多少独特的项目,对吧?如果$name
数组包含4个项目,则count(array_unique())
应该返回4.然后应该匹配count()
中项目的$name
,对吧?好吧,如果count(array_unique())
的项目数少于count()
,则表示重复项已被过滤掉。
此处没有header
,而是echo
而不是else
,以便进行更简单的调试。
$name = array('bob','betty','dan','don'); // no dupes
$name = array('bob','betty','dan','dan'); // dupes
if (count(array_unique($name)) < count($name)) {
echo 'Dupes!';
exit;
}
else {
echo 'No Dupes!';
}
您也可以将array_diff_key
与array_unique
一起使用。基本上在array_unique
上执行$name
,然后通过array_diff_key
将其与原始$name
进行比较。如果count
大于0
则会有欺骗行为。
$name = array('bob','betty','dan','don'); // no dupes
$name = array('bob','betty','dan','dan'); // dupes
$name_diff = array_diff_key($name, array_unique($name));
if (count($name_diff) > 0) {
echo 'Dupes!';
echo '<pre>';
print_r($name_diff);
echo '</pre>';
exit;
}
else {
echo 'No Dupes!';
}
编辑我刚刚编辑了最后一个使用$name_diff
变量的建议,因为如果它确实返回的值超过0
,那么现在您在数组和放大器中有该值;可以采取行动。
答案 1 :(得分:1)
你可以尝试这个吗,你可以使用in_array
php函数
if (in_array($name[$x], $yourarray)) {
echo $name[$x] ." Exist";
}
重复检查:
if(count($yourarry)> count(array_unique($name))){
//found duplicate
}