我有一个 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;
}
}
你为什么要这样做:
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。那么哪个应该与$name
中的项目count()
相匹配,对吧? 好吧,如果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
一起使用。基本上对$name
进行array_unique
,然后将其与原始$name
进行比较array_diff_key
运行。如果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
您现在在数组中拥有该值并可以对其进行操作。
你能试试这个吗,你可以使用 php 函数in_array
if (in_array($name[$x], $yourarray)) {
echo $name[$x] ." Exist";
}
对于重复检查:
if(count($yourarry)> count(array_unique($name))){
//found duplicate
}