我有以下代码:
$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)
,有没有办法修改{{1} }以获取$pattern
而不是null
?
答案 0 :(得分:1)
不,这在PHP中是不可能的。 preg_match()函数只处理字符串, null 是完全其他的数据类型。
将此转换为您想要的内容很简单。在PHP 5.3中,您可以使用array_walk()的匿名函数迭代数组,然后使用缩短的ternary operation更新您的值。
array_walk($array, function(&$val) { $val = $val ?: null; });