2017-10-18 162 views
1

输出必须是“这是测试字符串样本”。对于具有索引值的小型数组过滤器是正确的,如果过滤器数组值超过100个值,我们不能分配静态索引数。如何循环过滤到我的基本数组。我知道可以使用array_diff,但我只是学习如何使用for循环。如何在PHP中使用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] "; 
    } 

?> 
+0

您正在寻找in_array($改编[$ i],$过滤器); – Tarun

回答

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] "; 
} 
+0

可以用for循环吗?只是想知道bro –

+1

@MinKoKo可能,但你真的不应该这样做。代码变得不可读。 – Philipp

+0

感谢兄弟你很好的答案<3 –

1

使用in_array

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

感谢兄弟。可以用嵌套循环吗? –