Avatar billede allanhansendk Nybegynder
25. november 2008 - 10:42 Der er 8 kommentarer og
1 løsning

Invalid argument supplied for foreach()

Jeg har følgende kode:

<?php
    class priv {
        public function __construct($uid, $program){
            global $mysqli;

            $this->arrProg = array();

            $read = $mysqli->query("SELECT * FROM priv WHERE uid = '".$uid."'");
            while($Arr = $read->fetch_array()){
                $this->arrProg[$Arr['program']] = '0';
                array_push($this->arrProg, split(",", $Arr['attribut']));
            }

            print_r($this->arrProg);
           
            echo "<br />";
        }

        public function echo_me(){           
            echo "<br />";

            foreach($this->arrProg AS $key => $program){
                echo "<br />".$key."<br />";

                foreach($program AS $afdeling){
                    echo $afdeling."<br />";
                }
            }

            echo "<br />";
        }
    }
?>

Problemet ligger i public function echo_me(){}, hvor jeg hver gang den første foreach() kører får følgende:

Warning: Invalid argument supplied for foreach() in C:\WWW\info\ldap\inc\class.priv.php on line 27

Men derudover får jeg da data jeg ønsker, så fejlen har ikke indvirken på det jeg gerne vil have den til, men derfor skal den jo ikke fejle.

Er der nogen der kan hjælpe med at afhjælpe denne fejl?
Avatar billede olebole Juniormester
25. november 2008 - 10:59 #1
<ole>

Nu er det ikke en fejl, men en advarsel, men derfor bør den jo ikke være der alligevel  =)

Kan det mon hænge sammen med, at du ikke erklærer variablen udenfor klassens funktioner?

/mvh
</bole>
Avatar billede allanhansendk Nybegynder
25. november 2008 - 11:11 #2
Hvilken variabel? Og hvordan vil du erklære den?

Beklager hvis det er dumme spørgsmål, men er ikke just på hjemmebane i classes (endnu).
Avatar billede dkfire Nybegynder
25. november 2008 - 11:24 #3
Måske noget i stil med:
class priv {
        private $arrProg = array();

        public function __construct($uid, $program){
            global $mysqli;

            $read = $mysqli->query("SELECT * FROM priv WHERE uid = '".$uid."'");
            while($Arr = $read->fetch_array()){
                $this->arrProg[$Arr['program']] = '0';
                array_push($this->arrProg, split(",", $Arr['attribut']));
            }

            print_r($this->arrProg);
         
            echo "<br />";
        }

        public function echo_me(){         
            echo "<br />";

            foreach($this->arrProg AS $key => $program){
                echo "<br />".$key."<br />";

                foreach($program AS $afdeling){
                    echo $afdeling."<br />";
                }
            }

            echo "<br />";
        }
    }
Avatar billede allanhansendk Nybegynder
25. november 2008 - 11:27 #4
Mjah, det gjorde dog ingen forskel.
Avatar billede allanhansendk Nybegynder
25. november 2008 - 11:37 #5
Mit array ser således ud:

Array ( [kontooversigt] => 0 [0] => Array ( [0] => 2105 [1] => 2210 [2] => 2115 ) [reklamationer] => 0 [1] => Array ( [0] => ) )
Avatar billede dkfire Nybegynder
25. november 2008 - 12:10 #6
Jamen så indeholder alle elementer i dit array jo ikke et array og derfor kan du ikke bruge din anden foreach. Så bliver du jo nød til at sortere lidt i dit array.

Noget ala:
            foreach($this->arrProg AS $key => $program){
                echo "<br />".$key."<br />";

                if(is_array($program)){
                    foreach($program AS $afdeling){
                        echo $afdeling."<br />";
                    }
                } else
                    echo $program."<br />";
            }
Avatar billede allanhansendk Nybegynder
25. november 2008 - 12:21 #7
Skide godt... God ting.

dkfire, smider du ikke et svar?
Avatar billede dkfire Nybegynder
25. november 2008 - 13:13 #8
svar :-)
Avatar billede allanhansendk Nybegynder
25. november 2008 - 13:29 #9
Mange tak for hjælpen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester