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中收到了正确的结果,但是,它似乎嵌套得太深了一层。

我的结果是这样的:

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 因为您将 $eventDates[0] 作为匹配数组传递给 preg 函数。

于 2012-05-12T06:53:25.817 回答
1

您可以使用从不返回数组数组的T-Regx

$eventDateRegex = '\d{2} [A-Z][a-z]{2} \d{4}';
$eventDates[$i] = pattern($eventDateRegex)->match($parsedEvent)->all();

这将返回:

[
   ['19 Apr 2012', '24 May 2012']    // first $i
   ['21 Apr 2012', '30 Jun 2012']    // second $i
]

PS:请注意,感谢T-Regx -$eventDateRegex没有/分隔符。

于 2019-01-15T16:33:53.333 回答
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 回答