警告:in_array()期望参数2为数组,给定为null(循环)

时间:2018-09-19 16:29:04

标签: php arrays loops

我正在循环查找两个数组之间的字符串重叠,删除那些存在一个的值,以便仅保留$ check的空值,在这种情况下为$ check [5]。

第二个$ check是多维的。

    $names = ["bob", "selena", "hailey", "rob", "justin", "robocop"];

    $check = [
        ["justin"], //bob
        ["justin", "selena", "robocop"],  //selena
        ["justin"], //hailey
        ["justin", "rob"], //rob
        [], //justin
        ["justin", "selena", "bob"] //robocop
    ];


    for ($i = 0; $i < count($names); $i++) {

        for ($j = 0; $j < count($check); $j++) {

            if (in_array($names[$i], $check[$j])) {

                unset($check[$j]);

            }


        }


    }

第一个循环通过$ names运行,第二个循环通过$ check运行。

如果当前字符串来自$ names($names[i]) 存在于$check ($check[j])的当前数组中 数组被删除。

但是,控制台会显示警告:in_array()期望参数2为数组,给定null。我发现这很奇怪,因为$check[j]应该等于$ check内部的数组之一。

有什么办法可以解决这个问题?

2 个答案:

答案 0 :(得分:1)

在外循环进行几次迭代后,您将没有设置$check的大部分。像这样的for循环,您指望着那里的特定数字键,但是由于您未设置它们,所以它们的值是不确定的,也就是null

您可以通过使用foreach循环来避免这种情况。

foreach ($names as $name) {

    foreach ($check as $key => $array) {

        if (in_array($name, $array)) {

            unset($check[$key]);

        }


    }


}

答案 1 :(得分:0)

当您继续取消设置$ check数组时,$ check数组的大小将减小。因此,$ check不会为$ j的较高值返回值

您可以在此代码段中进行如下较小的修改

    $checkcount = count($check);

    for ($i = 0; $i < count($names); $i++) {

    for ($j = 0; $j < $checkcount; $j++) {

        if (isset($check[$j]) && in_array($names[$i], $check[$j])) {

            unset($check[$j]);


        }


    }