0

別のページから URL とタイトルを取得するために preg_match_all を使用していますが、取得は問題ありませんが、foreach を使用して取得することはできません。または foreach の代わりに別の方法がありますか?

//gets URLs of href='xxxx'   
 preg_match_all('/a href="([^"]+)" class=l.+?>.+?<\/a>/',$sear,$results);

//gets titles of >xxxx</a>   
    preg_match_all('/a href=".+?" class=l.+?>([^"]+)<\/a>/',$sear,$t);

以下のコードは、取得した URL を表示します

foreach ($results[1] as $url)
{
echo "<a href='$url'>$u</a> <br>";

$i++;
}

以下のコードは、取得したタイトルを表示します

   foreach ($t[1] as $title)
   { 
   echo $title; 
   $i++;
   }

しかし、それら(URLとタイトル)を1つのforeachに表示する方法がわからないので、次のようにすることができます

<a href='URL'>Title</a> 

私はphpが初めてです助けてください!!

4

3 に答える 3

1

PREG_SET_ORDERフラグを使用して、1つの式で両方を一致させます。

preg_match_all('/a href="([^"]+)" class=l.+?>(.+?)<\/a>/',$sear,$results, PREG_SET_ORDER);

次に、結果配列に2つの一致するグループがあります。各要素には、各一致セットの配列が含まれ(マニュアルでは、そのフラグについてこれについて詳しく説明されています)、$results配列をループして、内部から各グループを取得できます。

于 2012-05-04T19:48:22.540 に答える
1

for通常のサイクルを使用できます。

if ( count($result[1]) == count($t[1]) ){
    for ( $i = 0; $i < count($result[1]); $i++ ){
        echo "<a href='" . $result[1][$i] . "'>" . $t[1][$i] . "</a> <br>";
    }
}

これは、URLとタイトルの両方の数が一致する場合にのみ使用する必要があります。また、URLとタイトルの両方を同じpreg_match_allように一致させることを検討する必要があります。そうすれば、2つの配列にアクセスする必要はなく、1つの配列にアクセスする必要があります...(Brian Warshawが提案したように)

于 2012-05-04T19:48:25.347 に答える
1

URLとリンク表示テキストの両方を一度に一致させるのはどうですか。

preg_match_all('/a href="([^"]+)" class=l.+?>([^"]+)<\/a>/',$sear,$results);

$resultsこれで、配列の[1]とインデックスに一致する値の両方が含まれるはず[2]です。

foreach ($results as $link) {
  $url = $link[1];
  $text = $link[2];

  echo "Link '$text' to $url";
}
于 2012-05-04T19:48:54.740 に答える