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

时间:2015-01-12 13:50:29

标签: php

我有一个包含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是的 在FAVES的所有技能?没有

我已尝试过各种不同的数字,并且它始终是第一个不匹配的数字 - 如果有人知道原因,我会大量欣赏它。 ; - )

2 个答案:

答案 0 :(得分:0)

当我像这样运行你的代码时,它会返回正确的值。

$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,它不会检查相同的类型。

答案 1 :(得分:-1)

看看你的代码似乎:

  • 您有一个包含所有可能值的数组。
  • 您有一个包含实际提供值的数组。
  • 您想知道是否提供的值不在包含所有可能值的数组中。

这可以使用array_diff函数使用一行代码来完成,该函数返回第一个数组中第二个数组中不存在的所有项。

$all_skills_added = (count(array_diff($all_barristers_faves, $allfavourites)) === 0);

对array_diff的调用会为$ all_barristers_faves中的所有项目提供$ allfavourites中不会出现的项目。当这些项目的数量为0时,您可以确定所有“技能”都在“收藏”中。