Ankündigung

Einklappen
Keine Ankündigung bisher.

Rekursive Darstellung von mehreren Arrays

Einklappen

Neue Werbung 2019

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

  • Rekursive Darstellung von mehreren Arrays

    Ich habe folgendes Thema schon eröffnet nur leider hat die komplett am ziel vorbei geführt auch mit Titel so das ich es jetzt richtig machen möchte.

    PHP-Code:
    <?
    //Array was dann aus der Datenbank kommt (nachgebaut)
    $ergebnis_test= array( 
        array
        (
                group_id=>1,
                parent_group_id=>NULL,
                partnerid=>12673,
        ), 
        array
        (
                group_id=>2,
                parent_group_id=>1,
                partnerid=>12673,
        ),
        array
        (
                group_id=>3,
                parent_group_id=>2,
                partnerid=>12673,
        ), 
        array
        (
                group_id=>18,
                parent_group_id=>1,
                partnerid=>12673,
        ),
        array
        (
                group_id=>26,
                parent_group_id=>3,
                partnerid=>12673,
        ), 
    );

    //funktion für baumstruktur
    function tree( $parent_id, $array)
    {
        $count = count ($array);    
        $score = array();
        $groups = array();
        $big = array();
        for($i=0; $i<= $count-1; $i++)
        {        
            if($array[0]['group_id'] >= $parent_id)
            {
                $score[]= $array[$i]['parent_group_id'];
                $groups[] =    $array[$i]['group_id'];
                $output = $groups[$i] ." => ". $score[$i];            
                            
                echo '<pre>' .  print_r( $output, 1 ) .  '</pre>';                                    
            }

            if($score[$i] > $parent_id)
            {            
                $big[] = $score[$i];            
                echo '<pre>' .  print_r( $big, 1 ) .  '</pre>';            
            }
        }    
    }

    $parent_id = 1;
    tree($parent_id, $ergebnis_test);
    ?>
    Jetzt hab ich auch selber schon was gemacht. Es geht darum das es sich beliebig tief verschachteln lässt. Also muss ich ja irgendwo und irgendwie die funktion wieder aufrufen nur wo und wie?

  • #2
    hey,

    ich hab mal was versucht, test konnte ich es noch nicht aber ich denke dass der ansatz ganz gut sein kann. Du willst ja eigentlich einen MultiWayArray abarbeiten, wenn $array ein einfacher Array ist bist du ja schon im Bereich der Verarbeitung der Daten.

    PHP-Code:
    function tree$parent_id$array)
    {
        
    $count count ($array);    
        
    $score = array();
        
    $groups = array();
        
    $big = array();
        
        if (
    is_multiwayarray($array)) {
        
        foreach (
    $array as $node) {
         
    tree($parent_id,$node)  
        }    
           
        } else {
        
            for(
    $i=0$i<= $count-1$i++) {        
                if(
    $array[0]['group_id'] >= $parent_id)
                {
                
    $score[]= $array[$i]['parent_group_id'];
                
    $groups[] =    $array[$i]['group_id'];
                
    $output $groups[$i] ." => "$score[$i];            
                            
                echo 
    '<pre>' .  print_r$output) .  '</pre>';                                    
                }

                if(
    $score[$i] > $parent_id)
                {            
                
    $big[] = $score[$i];            
                echo 
    '<pre>' .  print_r$big) .  '</pre>';            
                }
        } 
        
        }
        
        
           
    }

    function 
    is_multiwayarray($multiarray) {
        if(
    is_array($multiarray)) {
            foreach(
    $multiarray as $array) {
                if (
    is_array($array)) {
                    return 
    true;
                }
            }
        }
        return 
    false;

    Kommentar


    • #3
      Hallo,

      funktioniert leider noch nicht. Es ist irgendwo noch eine falsche klammer die werd ich danach mal raus suchen. Ich meld mich dann wieder.

      Schonmal danke für die hilfe

      Kommentar


      • #4
        Ich hab jetzt den Fehler gefuden es war ein vergessenes Semikolon.

        Nur leider bekomme ich dadurch jetzt keine ausgabe mehr.

        PHP-Code:
        $ergebnis_test= array( 
            array
            (
                    
        group_id=>1,
                    
        parent_group_id=>NULL,
                    
        partnerid=>12673,
            ), 
            array
            (
                    
        group_id=>2,
                    
        parent_group_id=>1,
                    
        partnerid=>12673,
            ),
            array
            (
                    
        group_id=>3,
                    
        parent_group_id=>2,
                    
        partnerid=>12673,
            ), 
            array
            (
                    
        group_id=>18,
                    
        parent_group_id=>1,
                    
        partnerid=>12673,
            ),
            array
            (
                    
        group_id=>26,
                    
        parent_group_id=>3,
                    
        partnerid=>12673,
            ), 
        );


        function 
        tree$parent_id$array)
        {
            
        $count count ($array);    
            
        $score = array();
            
        $groups = array();
            
        $big = array();
            
            if (
        is_multiwayarray($array)) 
            {
            
                foreach (
        $array as $node
                {            
                    
        tree($parent_id,$node);
                    echo 
        '<pre>' .  print_r$node) .  '</pre>';  
                }    
               
            } 
            else 
            {
            
                for(
        $i=0$i<= $count-1$i++) 
                {        
                    if(
        $array[0]['group_id'] >= $parent_id)
                    {
                        
        $score[]= $array[$i]['parent_group_id'];
                        
        $groups[] =    $array[$i]['group_id'];
                        
        $output $groups[$i] ." => "$score[$i];            
                                
                        echo 
        '<pre>' .  print_r$output) .  '</pre>';                                    
                    }

                    if(
        $score[$i] > $parent_id)
                    {            
                        
        $big[] = $score[$i];            
                        echo 
        '<pre>' .  print_r$big) .  '</pre>';            
                    }
                }    
            }       
        }

        function 
        is_multiwayarray($multiarray
        {
            if(
        is_array($multiarray)) 
            {
                foreach(
        $multiarray as $array
                {
                    if (
        is_array($array)) 
                    {
                        return 
        true;
                    }
                }
            }
            return 
        false;
        }  

        $parent_id 1;
        tree($parent_id$ergebnis_test); 
        vielleicht sieht noch jemand was.

        Kommentar


        • #5
          Was soll das mit dem Multiway?
          Normal ginge das so:

          Code:
          function rek (element) 
            {
            if (is_array (element))
              {
              foreach ( as subelement)
                rek (subelement)
              return
              }
            echo element
          }

          Kommentar


          • #6
            @nikosch: mit deiner ausgabe komm ich jetzt noch nicht ganz zu recht.

            Des ganze sieht jetzt bei mir so aus

            PHP-Code:
            function tree$parent_id$array)
            {
                
            $count     count ($array);    
                
            $score     = array();
                
            $groups = array();
                
            $big     = array();
            //    $output    = array();    
                
                
            for($i=0$i<= $count-1$i++)
                {    
                    
            $parent_id $array[$i]['parent_group_id'];    
                    if(
            $array[0]['group_id'] >= $parent_id)
                    {            
                        
            $score[]    = $array[$i]['parent_group_id'];
                        
            $groups[]     = $array[$i]['group_id'];
                        
            $output     $groups[$i] ." => "$score[$i];        
                        
                            if(
            current_self($score) > $parent_id)
                            {
                                echo 
            "drin";
            //                    tree($parent_id, $score);
                            
            }
                        
                        
                        
                        echo 
            '<pre>' .  print_r$score) .  '</pre>';
                        echo 
            '<pre>' .  print_r$output) .  '</pre>';                                    
                    }

                    if(
            $score[$i] > $parent_id)
                    {                        
                        
            $big[] = $score[$i];            
            //            echo '<pre>' .  print_r( $big, 1 ) .  '</pre>';            
                    
            }
                }    
            }

            function 
            current_self($array)
            {
                
            $count count($array);
                for(
            $i=0$i=$count$i++)
                {
                    foreach(
            $array as $item)
                    {
                            
                    }
                return 
            $item;
                }

            Nur leider bricht er jetzt bei der zweiten 1 ab.

            Das Problem ist das ich mit der parent_group_id arbeiten muss weil die mir anzeigt wie das ganze verschachtelt werden soll.

            Jetzt hab ich es wie ich es erklären kann. Also wenn ich zwei oder 3 mitglieder von einer parent_group_id habe sollen die in ein array gesteckt werden und immer so weiter bis keine parent_group_id mehr vorhanden ist.

            Kommentar


            • #7
              Schon klar. Meines war der Ansatz um es auszulesen. Zum Einlesen mache ich es immer so in der Art (Sortierung mit array_reverse wäre besser durch eine DB Sortierung zu bewerkstelligen, dann stimmt auch die Reihenfolge der Elemente):

              PHP-Code:
              $ergebnis_test array_reverse ($ergebnis_test);

              $new = array ();
              foreach (
              $ergebnis_test as $set)
                {
                
              $iPGID $set['parent_group_id'];
                
              $iGID  $set['group_id'];
                
                
              $sParent null === $iPGID
                             
              '#root' 
                             
              $iPGID;

                
              // nur für die Reihenfolge wichtig (und Array Notices)
                
              if (!isset ($new[$sParent]) && null !== $iPGID)
                  {
                  
              $new[$sParent] = array (
                                         
              'partnerid' => null 
                                         
              'childs'    => array ()
                                         );
                  }
                
                
              $new[$iGID]['partnerid'] = $set['partnerid'];
                
              $new[$sParent]['childs'][$iGID] = $new[$iGID];
                unset (
              $new[$iGID]);
                }

              print_r ($new); 

              Kommentar

              Lädt...
              X