preg_match 函数不适用于括号

preg_match function doesn't work with parenthesis

我正在尝试匹配包含以下内容的数组:

[title] => Something (12) Pieces

带有一个 $item 字符串,该字符串还 Something (12) Pieces 具有此功能:

function in_array_r($item , $array){
    return preg_match('/"'. $item .'"/i' , json_encode($array));
}

但是即使它们是相同的,它也没有给我匹配。我做错了什么?

您需要做的是转义字符,这些字符是 RegEx 特有的。要实现这一点,您可以使用函数 preg_quote,但请注意,如果您不传递使用的定界符(在您的情况下 /),定界符不会被 preg_quote 转义到第二个参数。

function in_array_r($item , $array){
    return preg_match('/"'. preg_quote($item, '/') .'"/i' , json_encode($array));
}

http://php.net/preg_quote https://3v4l.org/p9n43

我认为你的方法是错误的,你想将数组转换为 JSON 只是为了检查数组中是否存在值。这是一种资源浪费,尤其是在数组很大的情况下。

另一种方法(在我看来这似乎更合乎逻辑)包括使用循环遍历数组的递归函数:

function in_array_r($value, &$array) {
    foreach ($array as &$v) {
        if (is_array($v) && in_array_r($value, $v) || $v === $value)
            return true;
    }
    return false;
}

$myarray = [ 1, 2, 3, [4, 5, 6, ['title' => 'Something (12) Pieces'], 7, 8]];

var_dump(in_array_r('Something (12) Pieces', $myarray));