Ваш $rows
является результатом «всего <tr>
в пределах <table>
». Он не только поймал <tr>
в теле таблицы, но и поймал его в заголовке таблицы, в котором нет <td>
. Следовательно, при чтении этой строки $cols->item(0)
и $cols->item(1)
оба получили NULL
.
Вы должны понять подсказку, когда ваш код не нашел атрибут ->nodeValue
в элементах (следовательно, вы добавили @
, чтобы подавить предупреждение).
Попробуйте заменить это:
$rows = $tables->item(0)->getElementsByTagName('tr');
на это:
$rows = $tables
->item(0)->getElementsByTagName('tbody')
->item(0)->getElementsByTagName('tr');
Теперь он ищет <tr>
в вашем <tbody>
и должен исправить вашу проблему с этим конкретным HTML.
Чтобы иметь более надежный код, вы должны были проверить переменные, прежде чем действовать с ними. Подойдет проверка типа или подсчета.