Invalid argument supplied for foreach() in clasa PHP
Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
-
sterica
- Mesaje:285
Invalid argument supplied for foreach() in clasa PHP
Salutare,
Am urmatoarea clasa:
Cod: Selectaţi tot
class getTest {
public $prop1;
public $prop2;
function fnc1 ($argument){
try {
$arr1 = array();
.....
$this->prop1 = $arr1;
////////// $arr1 arata cam asa:
fnc1 Object
(
[prop1] => Array
(
[0] => Array
(
[id] => 1,
[name] => Nume
)
....
)
[prop2] =>
)
//////////////////////
$conn = null;
}
catch($e){
...
}
}
}
$vartest = new getTest;
$vartest -> fnc1($conn);
$vartest -> prop1;
$demo = null;
foreach ($vartest as $item=>$val){
foreach ($val as $v){
$demo .= "<option value='".$v['id']."'>".$v['name']."</option>";
}
}
Dupa executia codului, foreach-ul returneaza corect valorile insa imi apare pe linia de cod cu al doilea foreach:
Cod: Selectaţi tot
Warning: Invalid argument supplied for foreach()
In arra1 imi este preluat si numele proprietatii prop2 si nu inteleg de ce.
Daca in clasa getTest elimin proprietatea public $prop2; nu imi mai returneaza acel warning, insa am nevoie de acea proprietate pentru ca clasa va mai avea metode.
De ce imi apare acel warning si cum il pot elimina?
Multumesc!
MarPlo
Mesaje:4343
Salut
In codul tau, $vartest reprezinta obiectul clasei getTest (cu proprietati si metode in el), nu un array /obiect cu structura fixa care sa fi parcus cu doua foreach().
- Cand se parcurge obiectul clasei, asa cum e la tine, ajunge la proprietati ale caror valori nu e un array care sa fie parcurs de al doilea foreach().
Daca ceea ce vrei e sa parcurgi array-ul din proprietatea $prop1, poti face asa:
Cod: Selectaţi tot
foreach ($vartest->prop1 as $item=>$val){
foreach($val as $v){
$demo .="<option value='".$v['id']."'>".$v['name']."</option>";
}
}
sterica
Mesaje:285
Am inteles, multumesc mult de explicatie si de ajutor!