Php 使用通配符将字符串与数组匹配
If发现了几个问题,这些问题解决了针对数组的匹配字符串(可能包含通配符)。或者换句话说,是对支持通配符的数组中的Php 使用通配符将字符串与数组匹配,php,arrays,Php,Arrays,If发现了几个问题,这些问题解决了针对数组的匹配字符串(可能包含通配符)。或者换句话说,是对支持通配符的数组中的的替换 我要寻找的恰恰相反,将文件名与可能包含通配符的数组相匹配。目前,我正在使用以下代码: function in_array_wc($string, $filters) { foreach ($filters as $filter) { // Regex ain't cheap, do we need it? if (strpos
的替换
我要寻找的恰恰相反,将文件名与可能包含通配符的数组相匹配。目前,我正在使用以下代码:
function in_array_wc($string, $filters) {
foreach ($filters as $filter) {
// Regex ain't cheap, do we need it?
if (strpos($filter, "*") !== false) {
$filter = str_replace( '\*', '.*?', preg_quote( $filter, '/' ) );
preg_match( '/^' . $filter . '$/i', $string, $result );
if ($result[0] !== null) {
return true;
}
} else { // no wildcards
if (in_array($string, $filters)) {
return true;
}
}
return false;
}
}
$ignore_list = array('robots.txt', '*.png', 'something-*-else.*');
$file = "test.png";
if (in_array_wc($file, $ignore_list)) {
// do stuff
}
问题是,匹配有点不可靠,特别是当涉及到o个通配符时。不确定我做错了什么,也许有人有更好/更可靠的功能?您注意到您的结果可以根据数据在阵列中的存储顺序重新发布吗?此数组('robots.txt','.png','something--else.*)返回false,而此数组('.png','robots.txt','something--else.*)返回true。这个函数不可释放的问题是,在任何情况下,在通过foreach循环的第一次迭代中,函数都会停止,因为在任何情况下,您都会返回任何内容。您的返回将停止迭代!如前所述,您所需要做的就是将“return false”移出foreach,以便仅当数组中没有与测试的stringAah匹配的元素时,它才会返回false,这太简单了。谢谢你给了我一记耳光。如果你认为我应该删除这篇文章,或者你想通过发布答案来增加成就点,请告诉我