[英]PHP: array filter matching anything containing a string
我有一個腳本,它允許我根據字符串過濾整個多維數組。 但只有當數組的值與字符串完全匹配時它才會起作用,而我希望它在字符串至少包含在值中時起作用。
所以,換句話說,如果字符串是“nana”,我希望過濾讓值“Banana”和“Ananas”匹配。 所以我希望在“%nana%”上進行搜索,以便允許在“nana”字符串之前和之后任意組合字母。
到目前為止,這是我的代碼:
$dataset=[[3,"Yellow","Banana"], [2,"Brown","Ananas"], [1,"Green","brown"]];
$dataset = array_filter($dataset, function ($v){
return filterArray('anana', $v);
});
function filterArray($needle,$haystack){
$needle = strtolower($needle);
foreach($haystack as $k => $v){
$haystack[$k] = strtolower($v);
};
return in_array($needle,$haystack);
}
echo '<pre>'; print_r($dataset); echo '</pre>';
這行不通。
我做了功課,發現在這種情況下經常引用“fnmatch”或“preg_match”。 問題是我看不到它們應該在我的腳本中的位置。 我瀏覽過的案例差異很大,以至於我不知道如何在這里正確使用它們。 因此,這不是尋找正確的 function 本身,而是了解如何以及在何處使用它。
我試過了,但沒有用:
....
foreach($haystack as $k => $v){
if(preg_match('/^'.$needle.'$/i', $v)) {
$haystack[$k] = strtolower($v);
}
};
....
這也不起作用:
....
foreach($haystack as $k => $v){
if(preg_match("/\b$needle\b/i", $v)) {
$haystack[$k] = strtolower($v);
}
};
....
我也試過這個:
....
$dataset = array_filter(dataset, function ($v){
return filter((bool)preg_match("/$needle/i",$v);
});
....
這些更改都沒有任何好處,我感覺就像我用盡了在線和這里找到的解決方案。
我也嘗試使用“fnmatch”,即使我不確定如何以及在何處使用它,但沒有成功。
所以任何幫助將不勝感激。
您可以使用stripos
對$haystack
值內的任何位置的$needle
進行不區分大小寫的搜索:
$dataset=[[3,"Yellow","Banana"], [2,"Brown","Ananas"], [1,"Green","brown"]];
$dataset = array_filter($dataset, function ($v){
return filterArray('anana', $v);
});
function filterArray($needle,$haystack){
foreach($haystack as $v){
if (stripos($v, $needle) !== false) return true;
};
return false;
}
echo '<pre>'; print_r($dataset); echo '</pre>';
Output:
<pre>Array
(
[0] => Array
(
[0] => 3
[1] => Yellow
[2] => Banana
)
[1] => Array
(
[0] => 2
[1] => Brown
[2] => Ananas
)
)
</pre>
您可以使用stripos來檢查一個字符串是否包含另一個字符串。
function filterArray($needle,$haystack){
foreach($haystack as $k => $v){
if (stripos($v, $needle) !== false) return true;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.