warning supplied significa que invalid for error array argument php

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 } }