如何用preg_match在数组中search?
如何使用preg_match在数组中进行search?
例:
<?php if( preg_match( '/(my\n+string\n+)/i' , array( 'file' , 'my string => name', 'this') , $match) ) { //Excelent!! $items[] = $match[1]; } else { //Ups! not found! } ?>
在这篇文章中,我会为您提供三种不同的方法来做你所要求的。 实际上,我build议使用最后一个片段,因为它最容易理解,而且在代码中很整齐。
如何查看数组中与我的正则expression式匹配的元素?
有一个专门用于这个目的的函数preg_grep
。 它将采用正则expression式作为第一个参数,并将数组作为第二个参数。
看下面的例子:
$haystack = array ( 'say hello', 'hello stackoverflow', 'hello world', 'foo bar bas' ); $matches = preg_grep ('/^hello (\w+)/i', $haystack); print_r ($matches);
产量
Array ( [1] => hello stackoverflow [2] => hello world )
文档
- PHP:preg_grep – 手册
但我只想得到指定组的价值。 怎么样?
preg_match
array_reduce
可以array_reduce
解决这个问题; 看下面的代码片段。
$haystack = array ( 'say hello', 'hello stackoverflow', 'hello world', 'foo bar bas' ); function _matcher ($m, $str) { if (preg_match ('/^hello (\w+)/i', $str, $matches)) $m[] = $matches[1]; return $m; } // NOTE : // ------------------------------------------------------------------------------ // you could specify '_matcher' as an anonymous function directly to // array_reduce though that kind of decreases readability and is therefore // not recommended, but it is possible. $matches = array_reduce ($haystack, '_matcher', array ()); print_r ($matches);
产量
Array ( [0] => stackoverflow [1] => world )
文档
- PHP的:array_reduce – 手动
- PHP:preg_match – 手册
使用array_reduce
似乎乏味,是不是有另一种方式?
是的,这个实际上是干净的,虽然它不涉及使用任何预先存在的array_*
或preg_*
函数。
如果您打算多次使用此方法,请将其封装在一个函数中。
$matches = array (); foreach ($haystack as $str) if (preg_match ('/^hello (\w+)/i', $str, $m)) $matches[] = $m[1];
文档
- PHP:preg_match – 手册
使用preg_grep
$array = preg_grep( '/(my\n+string\n+)/i', array( 'file' , 'my string => name', 'this') );
您可以使用array_walk
将preg_match
函数应用于数组的每个元素。
$items = array(); foreach ($haystacks as $haystack) { if (preg_match($pattern, $haystack, $matches) $items[] = $matches[1]; }