如何用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_walkpreg_match函数应用于数组的每个元素。

http://us3.php.net/array_walk

 $items = array(); foreach ($haystacks as $haystack) { if (preg_match($pattern, $haystack, $matches) $items[] = $matches[1]; }