Invalid argument supplied for foreach()

Am acest cod si vreau sa ii fac o modificare

foreach ($return_value as $row) {

echo '	
	<h5 class="card-title">'.$row['name'].'</h5>
	<p class="card-text">'.$row['description'].'</p> ';
	
	echo $row['category']; 
						
}

echo $row[‘category’]; afiseaza in lista text, text2 ,text3
Vreau sa fac ca firecare text sa fie afisat intr-un buton

Am incercat

foreach ($return_value as $row) {

echo '	
	<h5 class="card-title">'.$row['name'].'</h5>
	<p class="card-text">'.$row['description'].'</p> ';
	
	//echo $row['category']; 

	foreach ($row['category'] as $value) {
		echo '<button class="btn btn-outline-danger btn-sm">'.$value.'</button>';
	}
							
}

Primesc Invalid argument supplied for foreach()

Pai $row['category'] este tot un array de iterezi pe el? Nu cumva e un string?
Cel putin asa inteleg din primul exemplu de cod.

Pentru foreach trebuie sa folosesti un array. probabil ca in $row["category"] nu ai un array (ca altfel s-ar fi numit categories!?).

Da-i un var_dump( $row["category"] ) ca sa vezi exact ce ai acolo, dar pare ca ai un string cu categoriile separate prin virgula.

Posibil sa mearga [pentru al doilea foreach]:

$categories = explode( ",", $row["category"] );
foreach( $categories as $value ) {
	echo "<button class='btn btn-outline-danger btn-sm'>{$value}</button>";
}
1 Like

Mi-ai rezolvat problema, multumesc!

1 Like

Uite un sfat ce nu l-ai cerut, dar care îți va prinde bine (ție și altora). Nu vreau să îl percepi altfel decât strict constructiv.

Atunci când întâmpini vreo problemă, o reproducere minimală te ajută foarte să înțelegi problema și să o explici altora. Nu vei putea niciodată rezolva o problemă dacă nu o înțelegi, cel mult vei nimeri ceva ce merge și aia e.

În plus, dacă este cineva care te-ar putea ajuta, va putea ori să parseze mental bucata de cod, ori să o bage rapid în consolă, să vadă unde este buba. Dacă pui zeci de linii de cod (sau dacă omiți detalii importante) lucrurile astea nu se vor întâmpla => nu vei primi ajutor.

Ce înseamnă reproducere minimală? Fix ce-i spune numele: minimum de cod necesar pentru a reproduce problema.

În cazul de față, raționamentul meu ar fi fost următorul:

  1. Eroarea zice că este ceva la foreach
  2. Deci nu este nevoie de nici un echo →
  3. Deci o reproducere minimală ar arăta așa:
foreach ($return_value as $row) {
  foreach ($row['category'] as $value) {}
}
  1. DAR nu știu ce conține $return_value
  2. Pun și minimum din variabila asta (i.e. cât să genereze problema: fără name sau description sau ce mai ai tu) →
  3. Deci expunerea problemei mele este următoarea:

Parcă arată mai bine și nici nu are nevoie de noroc/ghici și, cel mai probabil, îți dai seama singur de problemă :slight_smile:

9 Likes