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);
}
Что вызывает это предупреждение?
Ответы
Ответ 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
), узнайте, почему это не массив... и исправить его.
Основная, основная отладка.