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

时间:2017-10-18 08:23:22

标签: 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] ";
    }

?>

2 个答案:

答案 0 :(得分:5)

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

$filtered = array_diff($arr, $filter);

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

$filtered = array_filter($arr, function ($item) use ($filter) {
    return !in_array($item, $filter);
});

要打印结果,您可以使用连接将整个数组与“胶水”结合起来。

echo join(' ', $filtered);

要修复您的示例,您还可以遍历过滤器并使用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] ";
}

答案 1 :(得分:1)

使用in_array

foreach ($arr as $item) {
    if (in_array($item, $filter) {
        continue;
    }
    echo $item, ' ';
}