Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用通配符将字符串与数组匹配_Php_Arrays - Fatal编程技术网

Php 使用通配符将字符串与数组匹配

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

If发现了几个问题,这些问题解决了针对数组的匹配字符串(可能包含通配符)。或者换句话说,是对支持通配符的数组中的
的替换

我要寻找的恰恰相反,将文件名与可能包含通配符的数组相匹配。目前,我正在使用以下代码:

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,这太简单了。谢谢你给了我一记耳光。如果你认为我应该删除这篇文章,或者你想通过发布答案来增加成就点,请告诉我