2017-10-18 159 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

感謝兄弟。可以用嵌套循環嗎? –