1

ここで同様の質問を見つけましたが、私のシナリオには正確ではありませんでした。私は比較的 PHP に慣れていませんが、*preg_match_all* のマニュアルを読みました。

日付を見つけるためにページを解析しています。常に同じ形式です (例: 13 Apr 2012 )。これは私の *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はforループ内にあるため、単なる反復子です。$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* が多次元配列を吐き出す方法のためですか?

4

3 に答える 3

1

必要な形式で結果を取得しています。EventDates 配列の最初のレベルのインデックスは、for ループとインデックス $i の使用によって生成されます。たとえば、配列の最初の要素

array
  0 => 
    array
      0 => 
        array
          0 => string '19 Apr 2012' (length=11)
          1 => string '24 May 2012' (length=11)

正しい配列構造です

array
          0 => 
            array
              0 => string '19 Apr 2012' (length=11)
              1 => string '24 May 2012' (length=11)

しかし、$eventDates[0] をマッチ配列として preg 関数に渡したので、eventDates の位置 0 にあります。

于 2012-05-12T06:53:25.817 に答える
0

必要に応じて、配列を再構築できます。

$arr = array(
            array(
                array('19 Apr 2012', '24 May 2012')
                ),
            array(
                array('21 Apr 2012', '30 Jun 2012')
                )
            );

for ($i = 0; $i < count($arr); $i++)
    $arr[$i] = $arr[$i][0];

var_dump($arr);

あなたは得るでしょう

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)
于 2012-05-12T07:55:11.390 に答える