(PHP)在preg_匹配中获取null,而不是获取空字符串

(PHP)在preg_匹配中获取null,而不是获取空字符串,php,regex,zend-framework,preg-match,Php,Regex,Zend Framework,Preg Match,我有以下代码: $pattern = '(([a-z]{2})/)?(([a-z]{3,})/)?(\d{4}+)(/(\d{2})(/(\d{2}))?)?'; preg_match('#^' . $pattern . '$#i', '2010/12/01', $match); $match = Array ( [0] => 2010/12/01 [1] => [2] => [3] => [4] => [

我有以下代码:

$pattern = '(([a-z]{2})/)?(([a-z]{3,})/)?(\d{4}+)(/(\d{2})(/(\d{2}))?)?';

preg_match('#^' . $pattern . '$#i', '2010/12/01', $match);

$match = Array (
    [0] => 2010/12/01
    [1] => 
    [2] => 
    [3] => 
    [4] => 
    [5] => 2010
    [6] => /12/01
    [7] => 12
    [8] => /01
    [9] => 01
)

问题是$match[1]、$match[2]、$match[3]和match[4]是
string(0)
有没有办法修改
$pattern
以获得
null
而不是
string(0)
否,这在PHP中是不可能的。preg_match()函数只处理字符串,null是一种完全不同的数据类型

不过,将其转换为所需内容很简单。在PHP5.3中,可以使用匿名函数对数组进行迭代,然后使用一个缩短的字符串更新值


不,这在PHP中是不可能的。preg_match()函数只处理字符串,null是一种完全不同的数据类型

不过,将其转换为所需内容很简单。在PHP5.3中,可以使用匿名函数对数组进行迭代,然后使用一个缩短的字符串更新值


您的目标是哪个版本的PHP?我想知道您的源代码是否总是像
YYYY/MM/DD
?为什么希望它为null而不是“”。我认为这是不可能的,但我们可以帮助解决问题。问题是,当我将它与另一个数组联接时,字符串(0)参数不会被替换。快速解决方法:
foreach($match as&$item)if($item='')$item=null
您的目标是哪个版本的PHP?我想知道您的源代码是否总是像
YYYY/MM/DD
?为什么希望它为空而不是“”。我认为这是不可能的,但我们可以帮助解决问题。问题是,当我将它与另一个数组联接时,字符串(0)参数不会被替换。快速解决方法:
foreach($match as&$item)if($item='')$item=null
array_walk($array, function(&$val) { $val = $val ?: null; });