我有一个脚本,它允许我根据字符串过滤整个多维数组。但它只会工作,如果数组的值匹配字符串完全,而我希望它的工作时,字符串至少包含在值。
所以,换句话说,如果字符串是“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”在这种情况下经常被引用。问题是我没有看到它们应该在我的脚本中的位置。我浏览的情况不同,我不知道如何正确使用它们。所以这不是关于寻找正确的函数本身,而是关于理解如何以及在哪里使用它。
我试过这个,但它不工作:
....
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”,即使我不确定如何以及在哪里使用它,但没有成功。
2条答案
按热度按时间92dk7w1h1#
您可以使用
stripos
在$haystack
值内的任何位置执行不区分大小写的$needle
搜索:字符串
输出量:
型
Demo on 3v4l.org的
w3nuxt5m2#
您可以使用stripos来检查一个字符串是否包含另一个字符串。
字符串