Разобрать таблицу HTML в многомерный массив - PullRequest
2 голосов
/ 16 апреля 2011

Я хотел бы хранить изображения (которые находятся в таблицах) в многомерном массиве, сгруппированном в соответствии с их таблицей и их описаниями, чтобы позже при вызове изображений я мог отображать их соответствующим образом,Например, скажем, у меня есть две таблицы, одна с тремя изображениями, а другая с одной.

Мне бы хотелось, чтобы результирующий массив выглядел следующим образом:

Array
(
    [0] => Array
        (
            [0] => image1.jpg
            [1] => 1st Variation Description
        )

    [1] => Array
        (
            [0] => image2.jpg
            [1] => image3.jpg
            [2] => image4.jpg
            [3] => 2nd Variation Description
        )

)

Редактировать Спасибо за рекомендации по созданию простого HTML Dom Parser.Вот что я сделал до сих пор, и я достиг некоторого плато относительно того, как хранить данные в точной структуре, в которой я нуждаюсь.

$html = str_get_html($vartables);   
$varinfo = array();
foreach($html->find('table') as $table){
        $varinfo[] = $table->innertext;
}
print_r($varinfo);

Это дает мне кое-что о эффекте:

Array
(
    [0] => 
 <tr>
  <td width=150>
Description1
 </td>

 <td><a href="image1.jpg">
<img src="image1" height=100 border=1></a>
  </td>
 </tr>

    [1] => 
 <tr>
  <td width=150>
Description2
  </td>

<td><a href="image2.jpg">
<img src="image2.jpg" height=200 border=1></a>
  </td>
  <td><a href="image3.jpg">
<img src="image3.jpg" height=200 border=1></a>

  </td>
 <td><a href="image4.jpg">
<img src="image4.jpg" height=200 border=1></a>
  </td>
 </tr>

)

Я бы хотел вырезать html и объединить файлы .jpg и описания в многомерном массиве ... к сожалению, мое новшество становится там лучше меня, я исследую, новрезаться в контрольно-пропускной пункт.

Ответы [ 2 ]

2 голосов
/ 17 апреля 2011

Нашел подобную проблему здесь и смог адаптировать ответ: как напечатать ячейки таблицы с простым html dom

Единственное отличие от моей первоначальной структуры в том, что описаниепервое значение в массиве вместо последнего, что лучше, я думаю.

$html = str_get_html($vartables);

$html = str_get_html($vartables);   
$theData = array();

foreach($html->find('table') as $onetable){
foreach($onetable->find('tr') as $row) {

    $rowData = array();
    foreach($row->find('td') as $cell) {
        if(substr_count($cell->innertext,"src")>0){
        foreach($cell->find('img') as $element) {
        $rowData[] = $element->src;
        }
        }else{
        $rowData[] = $cell->innertext;
        }
    }

    $theData[] = $rowData;
}
}

print_r($theData);

Выходы:

Array
(
    [0] => Array
        (
            [0] => Description1
            [1] => image1.jpg
        )

    [1] => Array
        (
            [0] => Description2
            [1] => image2.jpg
            [2] => image3.jpg
            [3] => image4.jpg
        )

)
1 голос
/ 16 апреля 2011

Попробуйте использовать phpQuery или другой фреймворк для анализа HTML.

...