2

我对 php 很陌生,所以这是一个我还没有找到答案的基本问题。

我通过如下进行正则表达式匹配从页面中提取重复信息。正则表达式有两个捕获组 (...),因此$matches数组的索引范围从 0(完整的正则表达式值)到 2(1 和 2 是捕获组值)。

<?php
    $page = file_get_contents(url);
    preg_match_all(regex-with-two-capturing-groups, $page, $matches);
    $m1 = $matches[1];
    $m2 = $matches[2];
    for ($i=0; $i < sizeof($m1); $i++) {
        echo ("<tr><td>$m1[$i]</td><td>$m2[$i]</td></tr>");
    }
?>

这很好用,但起初我尝试了一个较短的版本:

<?php
    $page = file_get_contents(url);
    preg_match_all(regex-with-two-capturing-groups, $page, $matches);
    for ($i=0; $i < sizeof($matches[0]); $i++) {
        echo ("<tr><td>$matches[1][$i]</td><td>$matches[2][$i]</td></tr>");
    }
?>

但这导致

<tr><td>Array[0]</td><td>Array[0]</td></tr>
<tr><td>Array[1]</td><td>Array[1]</td></tr>
<tr><td>Array[2]</td><td>Array[2]</td></tr>
<tr><td>Array[3]</td><td>Array[3]</td></tr>
<tr><td>Array[4]</td><td>Array[4]</td></tr>
...

为什么是这样?
有没有办法在一个表达式中进行二维索引,而不必定义中间数组 m1 和 m2?

4

1 回答 1

2

使用此代码:

<?php
    $page = file_get_contents(url);
    preg_match_all(regex-with-two-capturing-groups, $page, $matches);
    for ($i=0; $i < sizeof($matches[0]); $i++) {
        echo ("<tr><td>".$matches[1][$i]."</td><td>".$matches[2][$i]."</td></tr>");
    }
?>

PHP 文档:language.types.string.parsing

也看这里:PHP:多维数组元素的连接

于 2012-06-11T12:06:50.673 回答