(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; });