Подтвердить что ты не робот

PHP Предупреждение: неверный аргумент для foreach()

Почему я получаю это предупреждение от PHP?

Недопустимый аргумент для foreach()

Вот мой код:

// look for text file for this keyword
if (empty($site["textdirectory"])) {
    $site["textdirectory"] = "text";
}
if (file_exists(ROOT_DIR.$site["textdirectory"].'/'.urlencode($q).'.txt')) {
    $keywordtext = 
     file_get_contents(ROOT_DIR.$site["textdirectory"].'/'.urlencode($q).'.txt');
}
else {
    $keywordtext = null;
}

$keywordsXML = getEbayKeywords($q);

foreach($keywordsXML->PopularSearchResult as $item) {
    $topicsString = $item->AlternativeSearches;
   $relatedString = $item->RelatedSearches;
   if (!empty($topicsString)) {
        $topics =  split(";",$topicsString);
    }
    if (!empty($relatedString)) {
        $related = split(";",$relatedString);
    }

}

$node = array();
$node['keywords'] = $q;

2

$xml = ebay_rss($node);

$ebayItems = array();
$totalItems = count($xml->channel->item);

$totalPages = $totalItems / $pageSize;


$i = 0;
foreach  ($xml->channel->item as $item) {
  $ebayRss = 
    $item->children('http://www.ebay.com/marketplace/search/v1/services');

    if ($i>=($pageSize*($page-1)) && $i<($pageSize*$page)) {
        $newItem = array();
        $newItem['title'] = $item->title;
        $newItem['link'] = buyLink($item->link, $q);
        $newItem['image'] = ebay_stripImage($item->description);
        $newItem['currentbid'] = ebay_convertPrice($item->description);
        $newItem['bidcount'] = $ebayRss->BidCount;
        $newItem['endtime'] = ebay_convertTime($ebayRss->ListingEndTime);
        $newItem['type'] = $ebayRss->ListingType;
        if (!empty($ebayRss->BuyItNowPrice)) {
            $newItem['bin'] = ebay_convertPrice($item->description);
        }
        array_push($ebayItems, $newItem);
    }
    $i++;
}


$pageNumbers = array();
for ($i=1; $i<=$totalPages; $i++) {
    array_push($pageNumbers, $i);
}

3

// get user guides
$guidesXML = getEbayGuides($q);
$guides = array();
foreach ($guidesXML->guide as $guideXML) {
    $guide = array();
    $guide['url'] = makeguideLink($guideXML->url, $q);
    $guide['title'] = $guideXML->title;
    $guide['desc'] = $guideXML->desc;
    array_push($guides,$guide);
}

Что вызывает это предупреждение?

4b9b3361

Ответ 1

Вы должны проверить, что то, что вы передаете в foreach, является массивом с помощью функции is_array

Если вы не уверены, что это будет массив, вы всегда можете проверить, используя следующий пример кода PHP:

if (is_array($variable)) {

  foreach ($variable as $item) {
   //do something
  }
}

Ответ 2

Это означает, что вы делаете foreach на чем-то, что не является массивом.

Проверьте все свои операторы foreach и посмотрите, есть ли перед as, чтобы убедиться, что это фактически массив. Используйте var_dump, чтобы свалить его.

Затем зафиксируйте ту, где она не является массивом.

Как воспроизвести эту ошибку:

<?php
$skipper = "abcd";
foreach ($skipper as $item){       //the warning happens on this line.
    print "ok";
}
?>

Убедитесь, что $skipper - это массив.

Ответ 3

Потому что в любой строке, в которой происходит ошибка (вы не сказали нам, что это такое), вы передаете что-то в foreach, который не является массивом.

Посмотрите, что вы переходите в foreach, определите, что это (с var_export), узнайте, почему это не массив... и исправить его.

Основная, основная отладка.