我在这里发现了一个类似的问题,但并不完全符合我的情况。 我对PHP比较陌生,但已经阅读了* preg_match_all *。
的手册我正在解析页面以查找日期。它始终采用相同的格式(例如 2012年4月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 只是一个迭代器,因为它位于 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 *吐出多维数组的方式?
答案 0 :(得分:1)
您将以所需的格式获得结果。 EventDates数组中的第一级索引是由for-loop和您使用索引$ 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函数。
答案 1 :(得分: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)
答案 2 :(得分:0)