Preg_match_all 如何正确获取所有信息?

Preg_match_all how to correctly get all info?

无法理解如何正确地从网络上获取所有信息,不仅仅是一行而是所有信息。

此脚本生成输出:Array Array Array Array 并且只有一行。

<table id="rounded-corner" width=100%>
    <tr>
      <td>Nuotrauka</td>
      <td>Pavadinimas</td>
      <td>miestas</td>
      <td>metai</td>
      <td>kaina</td>
    </tr>
  <?
  $url = "My Link";
  $contents = file_get_contents($url);

  preg_match_all("|<span class=\"ttitle2\">(.*?) </span>|U",$contents,$pavadinimas);
  preg_match_all("|<span class=\"ttitle3\">(.*?)</span>|U",$contents,$miestas);
  preg_match_all("|<span class=\"ttitle1\">(.*?)</span>|U",$contents,$metai);
  preg_match_all("|<span class=\"ttitle1\" style='float: left;'>(.*?)<br />|U",$contents,$kaina);
  preg_match_all("/<img .*?(?=src)src=\"([^\"]+)\"/si", $contents, $img_link); 

  $output = "<tr><td><img src=$img_link></td><td>$pavadinimas</td><td>$miestas</td><td>$metai</td><td>$kaina</td></tr>";

  print_r($output);


 ?>
</table>

preg_match_all 进行深度复杂搜索。最大它将是二维数组。阅读 docs

how to correctly get all info?

为了找出答案,您只需转储所有结果信息:

print_r($pavadinimas);
print_r($miestas);
...

but i need that all info put in table

多点创意;如果 $pavadinimas 是二维数组:

echo '<table>';
foreach($p in $pavadinimas){
    echo '<tr>'; 
    foreach($item in $p){
         echo '<td>' ,  $item , '</td>' ;
    } 
    echo '</tr>';   
}
echo '</table>';

备注

要反转二维数组顺序,您只需在preg_match_all(参见文档中的 flag 部分)。这样您的 table 就会和其他订单一起收到。

函数的 $matches 参数将始终是一个数组 - 您需要在将变量添加到输出字符串之前对其进行处理。

http://php.net/manual/en/function.preg-match-all.php

据我所知,您不能 print_r 字符串和数组的混合。

如果所有匹配 return 结果的数量相同,这似乎由您的 $output 结构暗示,则迭代其中一个:

$output = '';
foreach ($pavadinimas[1] as $index => $match) { 
    $output .= '<tr><td><img src=' . $img_link[1][$index] . '></td><td>' . $match . '</td><td>' . $miestas[1][$index] . '</td><td>' . $metai[1][$index] . '</td><td>' . $kaina[1][$index] . '</td></tr>';    
}

试试这个。正在按要求提取数据。

    <table style="border: 1px solid black;" id="rounded-corner" width=100%>
    <tr>
      <td style="border: 1px solid black;">Nuotrauka</td>
      <td style="border: 1px solid black;">Pavadinimas</td>
      <td style="border: 1px solid black;">miestas</td>
      <td style="border: 1px solid black;">metai</td>
      <td style="border: 1px solid black;">kaina</td>
    </tr>
<?php
  $url = "put_your_url";
  $contents = file_get_contents($url); 

  preg_match_all('/<span class="ttitle2".*?>(.*?)<\/span>/',$contents,$pavadinimas); 

  preg_match_all('/<span class="ttitle3".*?>(.*?)<\/span>/',$contents,$miestas); 

  preg_match_all('/<span class="ttitle1".*?>(.*?)<\/span>/',$contents,$metai_kaina); 

  foreach($metai_kaina[0] as $key=>$metai_kaina_val){ 
    if($key%2==0)
    $metai[] = strip_tags($metai_kaina_val);
    else  
    $kaina[] = strip_tags($metai_kaina_val);  
  }

  preg_match_all('/<img .*?(?=src)src=\"([^\"]+)\"/si', $contents, $img_link);

  for($i=0; $i<count($pavadinimas[0]); $i++){
    echo '<tr>
          <td style="border: 1px solid black;"><img src="'.$img_link[1][$i+2].'"></td>
          <td style="border: 1px solid black;">'.$pavadinimas[0][$i].'</td>
          <td style="border: 1px solid black;">'.$miestas[0][$i].'</td>
          <td style="border: 1px solid black;">'.$metai[$i].'</td>
          <td style="border: 1px solid black;">'.$kaina[$i].'</td>
        </tr>';
    }
?>
</table>