如何在php中使用for循环过滤多个数组值?

Min*_* Ko 1 php arrays loops for-loop

输出必须是"这是一个测试字符串示例".对于具有索引值的小数组过滤器是正确的,如果过滤器数组值超过100个值我们无法分配静态索引号.如何循环过滤到我的基本数组.我知道可以使用array_diff,但我只是学习如何使用for循环.

<?php

$arr = array("This","is","testing","a","string",";","sample");
$filter = array(";","a");

    for($i=0; $i < count($arr); $i++){
        if($arr[$i] == $filter[0] || $arr[$i] == $filter[1]){
             continue;
        }
      echo "$arr[$i] ";
    }

?>
Run Code Online (Sandbox Code Playgroud)

Phi*_*ipp 5

您可以使用从数组中过滤多个值array_diff.对于这种情况,您不需要循环.

$filtered = array_diff($arr, $filter);
Run Code Online (Sandbox Code Playgroud)

通常,有一个函数,被称为array_filter过滤给定谓词的数组中的值.

$filtered = array_filter($arr, function ($item) use ($filter) {
    return !in_array($item, $filter);
});
Run Code Online (Sandbox Code Playgroud)

要打印结果,您可以使用join将整个数组与"胶水"组合在一起.

echo join(' ', $filtered);
Run Code Online (Sandbox Code Playgroud)

要修复您的示例,您还可以遍历过滤器并使用continue 2,以继续外部循环.但这是非常糟糕的做法,并导致无法读取的代码.所以不要这样做!一个更好的解决方案是"找到"标志和内部循环后的另一个检查,如果设置了标志...

for($i=0; $i < count($arr); $i++){
    for ($j = 0; $j < count($filter); $j++) {
        if ($arr[$i] == $filter[$j]) {
            continue 2;
        }
    }
    echo "$arr[$i] ";
}
Run Code Online (Sandbox Code Playgroud)