Какой самый эффективный способ сопоставить данные из <table>с PHP? - PullRequest
0 голосов
/ 15 сентября 2009

Например, чтобы вырезать пары ключ / значение из HTML, как показано ниже:

<tr> 
          <td id="td3"  class="td3"  bgcolor="#FFFFFF" colspan="4">■ Related Information </td>

        </tr>
        <tr> 
          <td id="td5" class="td5" width="10%">job title:</td>
          <td id="td5" class="td5" width="90%" colspan="3">Sales Representitive</td>
        </tr>
        <tr> 
          <td id="td5" class="td5" width="10%">Date:</td>

          <td id="td5" class="td5" width="40%">2009-9-15</td>
        </tr>
        <tr> 
          <td id="td5" class="td5" width="10%">Location:</td>

          <td id="td5" class="td5" width="40%">Jiangyin</td>
        </tr>
        <tr> 
          <td id="td5" class="td5" width="10%">Degree:</td>
          <td id="td5" class="td5" width="40%">Bachelor</td>

          <td id="td5" class="td5" width="10%">Major:</td>
          <td id="td5" class="td5" width="40%">No limit</td>
        </tr>
        <tr> 
          <td id="td5" class="td5" width="10%">Sex:</td>
          <td id="td5" class="td5" width="40%">No limit</
        </tr>
        <tr> 
          <td id="td5" class="td5" width="10%">Type:</td>
          <td id="td5" class="td5" width="40%">Fulltime</td>
          <td id="td5" class="td5" width="10%"></td>
          <td id="td5" class="td5" width="40%"></td>
        </tr>

Я устал писать длинные регулярные выражения. Есть ли более простой способ сделать это?

Ответы [ 3 ]

5 голосов
/ 15 сентября 2009

Используйте анализатор HTML или XML, такой как DOMDocument или SimpleXML . Затем вы можете просто пройти DOM и получить нужные данные.

2 голосов
/ 15 сентября 2009

Вы можете использовать несколько простых регулярных выражений:

$values = array();
if (preg_match_all("/<tr>(.*?)<\/tr>/is", $html, $matches)) {
 foreach($matches[1] as $match) {
  if (preg_match_all("/<td[^>]*>([^<]+)<\/td>/is", $match, $tds))
   array_push($values, $tds[1]);
 }
}

var_dump($values);

Гораздо проще, когда отдельные шаблоны вместо одного большого шаблона.

1 голос
/ 15 сентября 2009

Вы должны попробовать менее известный PHP Simple HTML DOM Parser . Это позволяет вам делать такие вещи:

// Create DOM from URL or file
$html = file_get_html('http://www.google.com/');

// Find all images
foreach($html->find('img') as $element)
       echo $element->src . '<br>';

// Find all links
foreach($html->find('a') as $element)
       echo $element->href . '<br>'; 

// Create DOM from string
$html = str_get_html('<div id="hello">Hello</div><div id="world">World</div>');

$html->find('div', 1)->class = 'bar';

$html->find('div[id=hello]', 0)->innertext = 'foo';

echo $html; // Output: <div id="hello">foo</div><div id="world" class="bar">World</div>
...