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






После нескольких итераций внешнего цикла вы отключите большую часть $check. С таким циклом for вы рассчитываете на наличие определенных цифровых клавиш, но, поскольку вы их отключили, их значения не определены, также как null.
Вы можете избежать этого, используя вместо этого циклы foreach.
foreach ($names as $name) {
foreach ($check as $key => $array) {
if (in_array($name, $array)) {
unset($check[$key]);
}
}
}
Поскольку вы продолжаете отключать массив $ 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]);
}
}