私はここで同様の質問を見つけましたが、私のシナリオでは正確ではありませんでした。 私は比較的新しいPHPですが、* preg_match_all *のマニュアルを読んでいます。PHP preg_match_allがネストされています
私は日付を見つけるためにページを解析しています。常に同じ形式です(例:13年12月13日)。 これは*文私*のpreg_match_allです:
$eventDateRegex = '/[0-9]{2}\s[A-Z]{1}[a-z]{2}\s[0-9]{4}/';
preg_match_all($eventDateRegex, $parsedEvent, $eventDates[$i]);
$ Iそれはためのループでだからちょうどイテレータです。 $ eventDatesで正しい結果を受け取っていますが、1つのレベルがネストされているようです。
私の結果はこのようなものです:私がすることを好むのに対し
array
0 =>
array
0 =>
array
0 => string '19 Apr 2012' (length=11)
1 => string '24 May 2012' (length=11)
1 =>
array
0 =>
array
0 => string '21 Apr 2012' (length=11)
1 => string '30 Jun 2012' (length=11)
:
array
0 =>
array
0 => string '19 Apr 2012' (length=11)
1 => string '24 May 2012' (length=11)
1 =>
array
0 => string '21 Apr 2012' (length=11)
1 => string '30 Jun 2012' (length=11)
が可能これですか、それだけで方法のためである* preg_match_all *を吐き出します多次元アレイ?
こんにちは@ msgmash.comを取得します、あなたはそれループイテレータについて正しいです。しかし、問題は依然として続く。ループ外でvar_dumpを実行すると、配列構造の出力が得られました。 preg_match_allはネストされた結果をあまりにも深く返しているようです。同じ結果セットの中で、私はこれがあります。 :単一の日付を取得するために 7 => 配列 0 => 配列 0 => '31 2012' 年8月 を、私は現在、これを行うために必要なのです$ eventDates [0] [0] [0] 私はあなたの答えを誤解しているかもしれないという事実に気付いていますか? – Jay
preg_match_allが結果を保持する配列をフォーマットする方法のため、結果が得られません。この配列は多次元配列で、最初の要素は正規表現全体と一致するすべての文字列を保持する配列です。したがって、最初のレベルインデックスはループインデックスであり、2番目のレベルはpreg_match_allのすべての文字列一致を保持する配列の最初のレベルインデックスであり、3番目のレベルインデックスは一致する各文字列です。プログラムで配列を変更しない限り、代替手段はありません。 –
ええ、もう少し考えてみて、それに同意しました。私は3Dアレイを受け入れなければなりません。ありがとう! – Jay