Ошибка говорит вам точно, в чем проблема.Вы получаете array
как ответ file_get_html
function
.В следующей строке, когда вы вызываете
$table = $html->find('table');
, вы пытаетесь вызвать метод find
вашего array
, который нарушает правила PHP.Вам нужно будет узнать, почему вы получаете array
, каково его содержимое.Интуитивно, я думаю, вы получите array
, где один из элементов (возможно, с индексом 0) содержит искомый элемент.Поэтому вам нужно будет изучить ваш array
.Если это ошибка, тогда вы сделаете успешный шаг вперед, понимая природу вашей проблемы.Если это результат с полезным атрибутом, то вы сможете его использовать.Для большей справки, реализация file_get_html
:
/**
* All of the Defines for the classes below.
* @author S.C. Chen <me578022@gmail.com>
*/
define('HDOM_TYPE_ELEMENT', 1);
define('HDOM_TYPE_COMMENT', 2);
define('HDOM_TYPE_TEXT', 3);
define('HDOM_TYPE_ENDTAG', 4);
define('HDOM_TYPE_ROOT', 5);
define('HDOM_TYPE_UNKNOWN', 6);
define('HDOM_QUOTE_DOUBLE', 0);
define('HDOM_QUOTE_SINGLE', 1);
define('HDOM_QUOTE_NO', 3);
define('HDOM_INFO_BEGIN', 0);
define('HDOM_INFO_END', 1);
define('HDOM_INFO_QUOTE', 2);
define('HDOM_INFO_SPACE', 3);
define('HDOM_INFO_TEXT', 4);
define('HDOM_INFO_INNER', 5);
define('HDOM_INFO_OUTER', 6);
define('HDOM_INFO_ENDSPACE',7);
define('DEFAULT_TARGET_CHARSET', 'UTF-8');
define('DEFAULT_BR_TEXT', "\r\n");
define('DEFAULT_SPAN_TEXT', " ");
define('MAX_FILE_SIZE', 600000);
// helper functions
// -----------------------------------------------------------------------------
// get html dom from file
// $maxlen is defined in the code as PHP_STREAM_COPY_ALL which is defined as -1.
function file_get_html($url, $use_include_path = false, $context=null, $offset = -1, $maxLen=-1, $lowercase = true, $forceTagsClosed=true, $target_charset = DEFAULT_TARGET_CHARSET, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT, $defaultSpanText=DEFAULT_SPAN_TEXT)
{
// We DO force the tags to be terminated.
$dom = new simple_html_dom(null, $lowercase, $forceTagsClosed, $target_charset, $stripRN, $defaultBRText, $defaultSpanText);
// For sourceforge users: uncomment the next line and comment the retreive_url_contents line 2 lines down if it is not already done.
$contents = file_get_contents($url, $use_include_path, $context, $offset);
// Paperg - use our own mechanism for getting the contents as we want to control the timeout.
//$contents = retrieve_url_contents($url);
if (empty($contents) || strlen($contents) > MAX_FILE_SIZE)
{
return false;
}
// The second parameter can force the selectors to all be lowercase.
$dom->load($contents, $lowercase, $stripRN);
return $dom;
}
EDIT
Оказывается, ошибка произошла в строке foreach
, вызывая метод пустого array
,Аккуратный и элегантный способ сделать это foreach
- определить помощника function
:
function myFind($input, $what) {
if (!is_array($input)) {
return $input->find($what);
}
$result = [];
foreach ($input as $element) {
$found = $element->find($what);
foreach ($found as $f) $result[]=$f;
}
return $result;
}
and then call this like:
foreach(myFind($table, 'tr[class=portlet-table-alternate]') as $row) {
//...
}