Предупреждение: in_array () ожидает, что параметр 2 будет массивом, задан ноль (цикл) - PullRequest
0 голосов
/ 19 сентября 2018

Я зацикливаюсь на совпадения строк между двумя массивами, удаляя эти значения там, где они есть, так что остаются только пустые значения $ 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 будет массивом, задан ноль.Я нахожу это странным, потому что $check[j] должен быть равен одному из массивов внутри $ check.

Можно ли как-нибудь это исправить?

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Поскольку вы продолжаете сбрасывать массив $ 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]);


        }


    }
0 голосов
/ 19 сентября 2018

После нескольких итераций внешнего цикла у вас будет большая часть $check.С таким циклом for вы рассчитываете на наличие определенных числовых ключей, но, поскольку вы их не установили, их значения не определены, то есть null.

Вы можете избежать этого, используя циклы foreach.вместо.

foreach ($names as $name) {

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

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

            unset($check[$key]);

        }


    }


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...