我正在循环查找两个数组之间的字符串重叠,删除那些存在一个的值,以便仅保留$ 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内部的数组之一。
有什么办法可以解决这个问题?
答案 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]);
}
}