supplied - Advertencia de PHP: argumento no válido proporcionado para foreach()
que significa invalid argument supplied for foreach() (4)
Debería verificar que lo que está pasando a foreach
es una matriz utilizando la función is_array
Si no está seguro de que va a ser una matriz, siempre puede verificar usando el siguiente código de ejemplo PHP:
if (is_array($variable)) {
foreach ($variable as $item) {
//do something
}
}
¿Por qué recibo esta advertencia de PHP?
Argumento inválido proporcionado para foreach ()
Aquí está mi código:
// 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);
}
¿Qué causa esta advertencia?
Esto significa que estás haciendo un foreach en algo que no es una matriz.
Revise todas sus declaraciones de foreach, y mire si la cosa antes del as
, para asegurarse de que en realidad es una matriz. Use var_dump
para var_dump
.
Luego arregle uno donde no sea una matriz.
Cómo reproducir este error:
<?php
$skipper = "abcd";
foreach ($skipper as $item){ //the warning happens on this line.
print "ok";
}
?>
Asegúrese de que $skipper
sea una matriz.
Porque, en cualquier línea en que ocurra el error (no nos dijiste cuál es), estás pasando algo a foreach
que no es una matriz.
Mira lo que estás pasando a foreach
, determina qué es (con var_export
), descubre por qué no es una matriz ... y arréglalo.
Depuración básica y básica.
Prueba esto.
if(is_array($value) || is_object($value)){
foreach($value as $item){
//somecode
}
}