2

私はphpに関してはかなり環境に配慮しているので、ここに私がまだ答えを見つけていない基本的な質問があります。

次のように正規表現マッチングを行うことで、ページから繰り返し情報を抽出します。正規表現には2つのキャプチャグループ(...)があるため、$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を定義する必要なしに、1つの式で2次元の索引付けを行う方法はありますか?

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 に答える