Rückgabe aus Funktion geht nicht

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Rückgabe aus Funktion geht nicht

    Folgender Sachverhalt:

    Function:
    PHP-Code:
    // Values eines Album herauslesen und als Array zurückgeben
    function get_values_from_album($albenarray$albumid){
        foreach(
    $albenarray AS $key=>$album){
            if(
    $album['id'] == $albumid){
                
    //return array('id'=>$album['id'], 'albumname'=>$album['albumname'], 'albumbeschreibung'=>$album['albumbeschreibung']);
                
    echo __FILE__.'----'.__LINE__;
                echo 
    '<pre style="text-align:left;">'print_r($album); echo '</pre>';
                return 
    $album;
            }
            if(isset(
    $album['childs'])){
                
    get_values_from_album($album['childs'], $albumid);
            }
        }
        return 
    false;

    Ausgaben in der Funktion sind perfekt, aber eine Rückgabe ist permanent leer.

    Aufruf:
    PHP-Code:
    $array get_values_from_album($alben$_POST['albumid']); 
    echo 
    '<pre style="text-align:left;">'print_r($array); echo '</pre>'
    Warum gibt es keine Rückgabe bzw. nur eine leere? Wer hat einen Plan und kann mir helfen?

  • #2
    ist $album['childs'] immer gesetzt?
    it's not a bug,
    it's a feature!

    Kommentar


    • #3
      Mach mal statt print_r() ein var_dump() ev kriegst du gar keinen leeren Rückgabewert sondern immer FALSE. Und ein Boolean kriegst du mit print_r() afaik nicht ausgegeben.
      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

      Kommentar


      • #4
        boolean wandelt print_r() in 0 oder 1.
        ich glaube dass in $album['childs'] nix drin steht, es aber immer gesetzt ist und die function somit immer false liefert

        OffTopic:
        Juhu, Beitrag 1800
        it's not a bug,
        it's a feature!

        Kommentar


        • #5
          PHP-Code:
          // Values eines Album herauslesen und als Array zurückgeben
          function get_values_from_album($albenarray$albumid){
              foreach(
          $albenarray AS $key=>$album){
                  if(
          $album['id'] == $albumid){
                      
          //return array('id'=>$album['id'], 'albumname'=>$album['albumname'], 'albumbeschreibung'=>$album['albumbeschreibung']);
                      
          echo __FILE__.'----'.__LINE__;
                      echo 
          '<pre style="text-align:left;">'print_r($album); echo '</pre>';
                      return 
          $album;
                  }
                  if(isset(
          $album['childs'])){
                      >>>return<<< 
          get_values_from_album($album['childs'], $albumid);
                  }
              }
              return 
          false;

          Da muss noch ein return hin. Wenn $album['id'] != $albumid ist, ruft sich die Funktion selber nochmal mit $album['childs'] auf, gibt das aber nicht mit zurück. Ergo bleibt deine Ausgabe leer!

          Kommentar


          • #6
            Leider helfen alle Eure Hinweise nicht weiter. In der Funktion selber sind die Testausgaben ja perfekt, nur eine Rückgabe gibt bei var_dump() ein bool(false) raus. Aber in der Funktion werden die entsprechenden Array-Teile perfekt ausgegeben.

            Noch andere Ideen?

            Kommentar


            • #7
              Komischerweise kommt bei der Ausgabe in der Funktion auch zweimal die Testausgabe, obwohl alle Einträge nur einmal da sind. Die ID, die abgefragt wird, ist der Primärschlüssel in der DB, also einmalig.

              Kommentar


              • #8
                Hier mal das Array, was ich zum Testen verwendet habe:
                PHP-Code:
                Array
                (
                    [
                0] => Array
                        (
                            [
                id] => 1
                            
                [albumname] => Sport
                            
                [albumbeschreibung] => 
                            [
                childs] => Array
                                (
                                    [
                0] => Array
                                        (
                                            [
                id] => 4
                                            
                [albumname] => Fußball
                                            
                [albumbeschreibung] => 
                                        )

                                    [
                1] => Array
                                        (
                                            [
                id] => 5
                                            
                [albumname] => Billard
                                            
                [albumbeschreibung] => 
                                            [
                childs] => Array
                                                (
                                                    [
                0] => Array
                                                        (
                                                            [
                id] => 6
                                                            
                [albumname] => Snooker
                                                            
                [albumbeschreibung] => 
                                                            [
                childs] => Array
                                                                (
                                                                    [
                0] => Array
                                                                        (
                                                                            [
                id] => 7
                                                                            
                [albumname] => 9-Ball
                                                                            
                [albumbeschreibung] => 
                                                                        )

                                                                    [
                1] => Array
                                                                        (
                                                                            [
                id] => 8
                                                                            
                [albumname] => 7-Ball
                                                                            
                [albumbeschreibung] => 
                                                                        )

                                                                )

                                                        )

                                                    [
                1] => Array
                                                        (
                                                            [
                id] => 9
                                                            
                [albumname] => Trickbillard
                                                            
                [albumbeschreibung] => 
                                                        )

                                                )

                                        )

                                )

                        )

                    [
                1] => Array
                        (
                            [
                id] => 2
                            
                [albumname] => Konzerte
                            
                [albumbeschreibung] => 
                            [
                childs] => Array
                                (
                                    [
                0] => Array
                                        (
                                            [
                id] => 10
                                            
                [albumname] => 2008
                                            
                [albumbeschreibung] => 
                                        )

                                )

                        )

                    [
                2] => Array
                        (
                            [
                id] => 3
                            
                [albumname] => Presse
                            
                [albumbeschreibung] => 
                        )


                Beim Aufruf der Funktion habe ich dieses Array übergeben und als Albumid die 10 verwendet.

                Kommentar


                • #9
                  So gehts:
                  PHP-Code:
                  // Values eines Album herauslesen und als Array zurückgeben
                  function get_values_from_album($albenarray$album_id){
                      
                  $value false;
                      foreach(
                  $albenarray AS $album){
                          if(
                  $album['id'] == $album_id){
                              
                  $value $album;
                          }
                          if(isset(
                  $album['childs'])){
                              
                  $value get_values_from_album($album['childs'], $album_id);
                          }
                      }
                      return 
                  $value;

                  *closed*

                  Kommentar

                  Lädt...
                  X