2016-12-20 5 views
-1

Я пытаюсь создать массив из этих данных, но я его не понимаю. Я попытался с функцией array_merge, но массив не построил правильно. Это мой код, я хочу создать массив с разными полями таблицы.Создайте массив из данных

<?php 
require('extractorhtml/simple_html_dom.php'); 
$dom = new DOMDocument(); 

//load the html 
$html = $dom->loadHTMLFile("http:"); 


//discard white space 
$dom->preserveWhiteSpace = false; 

//the table by its tag name 
$tables = $dom->getElementsByTagName('table'); 

//get all rows from the table 
$rows = $tables->item(0)->getElementsByTagName('tr'); 
echo '<input type="text" id="search" placeholder="find" />'; 
echo '<table id="example" class="table table-bordered table-striped display">'; 
echo '<thead>'; 
echo '<tr>'; 
echo '<th>Date</th>'; 
echo '<th>Hour</th>'; 
echo '<th>Competition</th>'; 
echo '<th>Event</th>'; 
echo '<th>Chanel</th>'; 
echo '</tr>'; 
echo '</thead>'; 
echo '<tbody>'; 
// loop over the table rows 
foreach ($rows as $row) 
{ 
    // get each column by tag name 
    $cols = $row->getElementsByTagName('td'); 
    // echo the values 
    echo '<tr>'; 
    echo '<td>'.$cols->item(0)->nodeValue.'</td>'; 
    echo '<td>'.$cols->item(1)->nodeValue.'</td>'; 
    echo '<td>'.$cols->item(3)->nodeValue.'</td>'; 
    echo '<td class="text-primary">'.$cols->item(4)->nodeValue.'</td>'; 
    echo '<td>'.$cols->item(5)->nodeValue.'</td>'; 
    echo '</tr>'; 
} 
echo '</tbody>'; 
echo '</table>'; 
?> 
+0

Где находится массив_merge? И где вы пытаетесь создать массив? –

+0

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

+0

Что находится в '$ tables'? Также покажите свои соответствующие попытки. Это помогает нам понять, что вы думаете, потому что сейчас это очень неясно. – nerdlyist

ответ

2

Вам не нужно объединять массивы, вам просто нужно нажать на новый массив, чтобы создать двумерный массив.

$new_array = array(); 
foreach ($rows as $row) 
{ 
    // get each column by tag name 
    $cols = $row->getElementsByTagName('td'); 
    // echo the values 
    echo '<tr>'; 
    echo '<td>'.$cols->item(0)->nodeValue.'</td>'; 
    echo '<td>'.$cols->item(1)->nodeValue.'</td>'; 
    echo '<td>'.$cols->item(3)->nodeValue.'</td>'; 
    echo '<td class="text-primary">'.$cols->item(4)->nodeValue.'</td>'; 
    echo '<td>'.$cols->item(5)->nodeValue.'</td>'; 
    echo '</tr>'; 
    $new_array[] = array(
     'date' => $cols->item(0)->nodeValue, 
     'hour' => $cols->item(1)->nodeValue, 
     'competition' => $cols->item(3)->nodeValue, 
     'channel' => $cols->item(5)->nodeValue 
    ); 
} 
+0

Спасибо, сейчас это работает – htmlpower

1

на основе ваших <th> значений, вы знаете, какие столбцы содержат какие значения, так это выглядит, как вы бы просто нужно изменить код внутри foreach цикла, чтобы добавить значения в массив, а не генерировать новый HTML с ними.

foreach ($rows as $row) 
{ 
    // get each column by tag name 
    $cols = $row->getElementsByTagName('td'); 

    $array['date'] = $cols->item(0)->nodeValue; 
    $array['hour'] = $cols->item(1)->nodeValue; 
    $array['competition'] = $cols->item(3)->nodeValue; 
    $array['event'] = $cols->item(4)->nodeValue; 
    $array['chanel'] = $cols->item(5)->nodeValue; 
    $result[] = $array; 
} 

После этого цикла, $result будет массив массивов, содержащих значения из <td> с, где каждый внутренний массив представляет собой один <tr>.

Смежные вопросы