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));
}
我认为你的方法是错误的,你想将数组转换为 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));
我正在尝试匹配包含以下内容的数组:
[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));
}
我认为你的方法是错误的,你想将数组转换为 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));