preg_match_all和空键

时间:2014-02-07 14:08:28

标签: php regex

我正在尝试使用单个preg_match_all匹配两个正则表达式,我需要获得包含匹配项的2个数组。

这是我目前的代码:

$s = 'abab';
preg_match_all('/(a)|(b)/', $s, $a); 
var_dump($a);

如果不考虑生成的多维数组是:

,它的效果很好
array (size=3)
  0 => 
    array (size=4)
      0 => string 'a' (length=1)
      1 => string 'b' (length=1)
      2 => string 'a' (length=1)
      3 => string 'b' (length=1)
  1 => 
    array (size=4)
      0 => string 'a' (length=1)
      1 => string '' (length=0)
      2 => string 'a' (length=1)
      3 => string '' (length=0)
  2 => 
    array (size=4)
      0 => string '' (length=0)
      1 => string 'b' (length=1)
      2 => string '' (length=0)
      3 => string 'b' (length=1)

所以,我可以使用$a[1]$a[2],但正如您所看到的,这些数组在“不匹配”键上有空值。

我需要:

array (size=3)
  0 => 
    array (size=4)
      0 => string 'a' (length=1)
      1 => string 'b' (length=1)
      2 => string 'a' (length=1)
      3 => string 'b' (length=1)
  1 => 
    array (size=2)
      0 => string 'a' (length=1)
      1 => string 'a' (length=1)
  2 => 
    array (size=2)
      0 => string 'b' (length=1)
      1 => string 'b' (length=1)

有一些参数传递给preg_match_all以获得没有空值的干净输出?我已经尝试了array_filter()但它没有删除它们我正在寻找一个简短的解决方案,所以我不能使用array_filter的回调(需要它代码 - 高尔夫挑战赛。)

1 个答案:

答案 0 :(得分:1)

不知道,为什么你需要这种方式,但最短的我想出来满足你的要求。

$s = 'abab';
preg_match_all('/(a)|(b)/', $s, $a); 
// filter all at once
$a = array_map('array_filter', $a);
var_dump($a);