我有一个包含 10 个数字的数组,我设置了一个简单的循环来检查当前值是否在数组中。所有值都应该匹配,因为它正在与来自的数组进行比较,但是第一个值永远不会匹配?
<?php
$i=0;
$numskills = sizeof($all_barristers_faves);
$all_skills_added = "Yes";
while ($i < $numskills) {
// CHECK FOR SKILL IN FAVES
if(in_array($all_barristers_faves[$i], $allfavourites)) {
echo $all_barristers_faves[$i]." Yes<br/>";
} else {
echo $all_barristers_faves[$i]." No<br/>";
$all_skills_added = "No";
}
$i++;
}
这输出:18 否19 是20 是21 是22 是23 是24 是25 是26 是27 是所有技能都在最爱?不
我已经用各种不同的数字集尝试过这个,它总是第一个不匹配的数字 - 如果有人知道原因,将不胜感激。
当我像这样运行你的代码时,它会返回正确的值。
$all_barristers_faves = array(10,12,13,14);
$allfavourites = array(10,12,13,14);
$i=0;
$numskills = sizeof($all_barristers_faves);
$all_skills_added = "Yes";
while ($i < $numskills) {
// CHECK FOR SKILL IN FAVES
if(in_array($all_barristers_faves[$i], $allfavourites)) {
echo $all_barristers_faves[$i]." Yes<br/>";
} else {
echo $all_barristers_faves[$i]." No<br/>";
$all_skills_added = "No";
}
$i++;
}
我建议你把in_array($all_barristers_faves[$i], $allfavourites)
变成in_array($all_barristers_faves[$i], $allfavourites, false);
.也许 18 在其中一个数组中被视为不同的类型。通过将第三个参数设置为 false,它不会检查相同的类型。
查看您的代码,似乎:
- 您有一个包含所有可能值的数组。
- 您有一个包含实际提供值的数组。
- 您想知道是否提供了不在所有可能值的数组中的值。
这可以使用 array_diff 函数通过一行代码来完成,该函数返回第一个数组中第二个数组中不存在的所有项。
$all_skills_added = (count(array_diff($all_barristers_faves, $allfavourites)) === 0);
对array_diff的调用为您提供了$all_barristers_faves中未在$allfavourites中出现的所有项目。当这些物品的计数为 0 时,您可以确定所有"技能"都在"收藏夹"中。