php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2009

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 05.02.2009, 21:51  
Erfahrener Benutzer
 
Registriert seit: 04.09.2008
Beiträge: 297
martl666 befindet sich auf einem aufstrebenden Ast
Standard 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) .  '</pre>';                                    
        }

        if(
$score[$i] > $parent_id)
        {            
            
$big[] = $score[$i];            
            echo 
'<pre>' .  print_r$big) .  '</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?
martl666 ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 05.02.2009, 22:31  
Neuer Benutzer
 
Registriert seit: 05.02.2009
Beiträge: 21
BumpyJohnson befindet sich auf einem aufstrebenden Ast
Standard

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;

BumpyJohnson ist offline  
Alt 06.02.2009, 07:23  
Erfahrener Benutzer
 
Registriert seit: 04.09.2008
Beiträge: 297
martl666 befindet sich auf einem aufstrebenden Ast
Standard

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
martl666 ist offline  
Alt 06.02.2009, 10:07  
Erfahrener Benutzer
 
Registriert seit: 04.09.2008
Beiträge: 297
martl666 befindet sich auf einem aufstrebenden Ast
Standard

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.
martl666 ist offline  
Alt 06.02.2009, 12:10  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

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
}
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline  
Alt 06.02.2009, 13:06  
Erfahrener Benutzer
 
Registriert seit: 04.09.2008
Beiträge: 297
martl666 befindet sich auf einem aufstrebenden Ast
Standard

@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.

Geändert von martl666 (06.02.2009 um 13:25 Uhr).
martl666 ist offline  
Alt 06.02.2009, 15:02  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.989
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

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); 
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--

Geändert von nikosch (06.02.2009 um 15:09 Uhr).
nikosch ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
3 Arrays als return für eine Funktion? aha_01 PHP Tipps 2009 16 08.12.2009 12:19
Mehrere Arrays summieren buggybugga PHP-Fortgeschrittene 8 22.07.2008 11:51
Rekursive Funktion funktioniert lokal, aber nicht remote? Anotherone PHP-Fortgeschrittene 1 21.06.2008 08:11
Variable Variablen zusammen mit Arrays Kenshin PHP Tipps 2008 2 20.04.2008 15:30
Arrays sortieren, Bezeichnung, Preis Ticos PHP Tipps 2006 4 07.09.2006 19:37
Arrays kreuzen PHP Tipps 2006 13 08.03.2006 11:36
[Erledigt] 2 Arrays miteinander vergleichen PHP Tipps 2007 3 17.12.2005 16:54
Objektorientierter Zugriff auf Multidimensionale Arrays PHP-Fortgeschrittene 31 26.11.2005 21:46
Problem beim vergleichen von 2 Arrays PHP Tipps 2005-2 1 06.10.2005 14:25
Werte von mehreren Arrays in Datenbank schreiben! PHP Tipps 2005 10 10.04.2005 16:43
[Erledigt] Kombination von mehreren Arrays PHP-Fortgeschrittene 27 18.02.2005 23:33
Alle Kombinationen von mehreren Arrays PHP-Fortgeschrittene 2 18.02.2005 09:59
Erkennung von Arrays in Strings PHP-Fortgeschrittene 15 07.12.2004 13:00
2 arrays in abhängigkeit ??? PHP Tipps 2004 2 11.08.2004 21:19
Werte eines Arrays in eine MySQL schreiben PHP Tipps 2004 2 28.06.2004 13:32

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
rekursive darstellung, print_r rekursiv, php array baum rekursiv, darstellung von array, http://www.php.de/php-einsteiger/51484-rekursive-darstellung-von-mehreren-arrays.html, print_r darstellung, rekursive darstellung datenbanken, rekursiv baum array php, php baumstruktur array rekursiv, multi array rekursiv kombination, php array rekursive, verschachteln subelement, recursives verschachteln php, kombination mehrerer arrays, mysql rekursiv verschachtelt, rekursive funktionsgleichung, rekursive darstellung einer baumstruktur, rekursion darstllung, aus rekursive darstellung zu einer funktionsgleichung, verschiedene darstellungen array php

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:13 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum