2011-09-09 36 views
1

を取得し、私は次のコードを持っている:(PHP)するpreg_matchにnullを取得する代わりに、空の文字列

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

問題はその$の試合である[1]、$マッチ[2]、$マッチを[3 ]とマッチ[4]はstring(0)はの代わりにを得るために$patternを変更する方法はありますか?

+0

どのバージョンのPHPをターゲットにしていますか? – webbiedave

+0

あなたのソースはいつも 'YYYY/MM/DD'のように思っていましたか? – ajreal

+1

なぜあなたはそれをnullにしたいのですか?私はこれは可能だと思いませんが、私たちは回避策を助けることができます。 – Galen

答えて

1

いいえ、これはPHPでは不可能です。 preg_match()関数は文字列のみを処理し、nullはまったく別のデータ型です。

これをあなたが望むものに変換するのは簡単ですが、 PHP 5.3では、匿名関数array_walk()を使用して配列を反復処理し、値を短くしてternary operationに更新することができます。

array_walk($array, function(&$val) { $val = $val ?: null; }); 
関連する問題