(PHP) Получение null в preg_match вместо получения пустой строки - PullRequest
1 голос
/ 09 сентября 2011

У меня есть следующий код:

$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)?

1 Ответ

1 голос
/ 09 сентября 2011

Нет, это невозможно в PHP.Функция preg_match () работает только со строками, а null - это совершенно другой тип данных.

Преобразовать это в то, что вы хотите, очень просто.В PHP 5.3 вы можете использовать анонимную функцию с array_walk () , чтобы выполнить итерацию по массиву, а затем обновить ваши значения с помощью сокращенной троичной операции .

array_walk($array, function(&$val) { $val = $val ?: null; });
...