PHP in_array数组的第一个元素不匹配


PHP in_array not matching first element of the array

我有一个包含 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 时,您可以确定所有"技能"都在"收藏夹"中。