php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 24.10.2005, 00:01  
Benutzer
 
Registriert seit: 23.10.2005
Beiträge: 54
greg
Standard Aus mehrdimensionalem Array ein Baumdiagramm erstellen

Nabend Leute,


Edit: Nach dem posten ist mir aufgefallen dass hier auch alles gequetscht wird, ich hoffe ihr könnt euch vorstellen dass das nicht alles linksbündig sein soll sondern entsprechend eingerückt.


Ich bin gerade auf die Idee gekommen mir eine Klasse zu schreiben, die ein Array entgegennimmt und daraus ein Baumdiagramm macht.

Mit Baumdiagramm meine ich sowas wie das was print_r erzeugt jedoch wesentlich lesbarer und eben auch für multidimensionale Arrays.

Ein Output könnte so aussehen:

Array
(
[0] => 'hallo'
[1] => 'nochmal hallo'
[2] => Array
(
[0] => 'wert 1'
[1] => 'wert 2'
[2] => Array
(
[0] => 'wert1'
[1] => 'wert2'
[2] => 'usw.'
)
)
)

Frage: Wie anstelln das ganze? Ich habe eben schon ne Weile dran rumgecoded aber bin an den Tabs gescheitert. Sprich alles total gequetscht und nen paar ( und ) sind auch durcheinander.

Hat jemand ne Idee ?

Gruß, greg
greg ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 24.10.2005, 00:36  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

lösung:
* rekursiv arbeiten,
* die rekursionstiefe als parameter mitgeben.
axo ist offline   Mit Zitat antworten
Alt 24.10.2005, 00:50  
Benutzer
 
Registriert seit: 23.10.2005
Beiträge: 54
greg
Standard

Dummerweise weis ich nicht was rekursiv bedeutet. Sagst dus mir oder muss ichs selbst suchen?

€dit: So, habe natürlich selbst mal eben nachgeschaut. Also wenn rekursiv programmieren bedeutet, dass eine Funktion sich selbst aufruft bis eine bestimmte Bedingung zutrifft, dann mache ich das ohnehin schon.

Also meine Funktion sah schon so aus:

function parseArray($array)
{
if (is_array($array)) {
$this->elements = count($array);
foreach ($array as $key => $value) {
$this->output .= '['.$key.']'.' => '.$value.'
';
$this->parseArray($value);
}
} else {

}
}

Aber das Problem war weniger das darstellen der Arrays ansich, sondern die Einrückung hierbei. Also wie weit nun der 10. Array nach rechts geschoben werden muss verstehst du?

Kannst du mir vll. ein Beispiel geben wie ich das lösen kann?
greg ist offline   Mit Zitat antworten
Alt 24.10.2005, 01:03  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

naja, das passt ja schon.

übrigens: es gibt [ php ] - tags, womit du dein zeug ordentlich eingerückt und syntaxkoloriert anzeigen kannst.

PHP-Code:
<?php
function parseArray($arr,$level 0) {
  [ .... ]
   
$this -> parseArray($value,$level 1);
  [ .... ]
}

?>
und wie du jetzt einrücken kannst - lass dir was einfallen.

http://www.php.net/str_repeat
axo ist offline   Mit Zitat antworten
Alt 24.10.2005, 01:05  
Benutzer
 
Registriert seit: 23.10.2005
Beiträge: 54
greg
Standard

Mhh okay ich denke ich zähle einfach wie oft die funktion aufgrufen wurde und rücke dementsprechend ein.
greg ist offline   Mit Zitat antworten
Alt 24.10.2005, 02:08  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von greg
Mhh okay ich denke ich zähle einfach wie oft die funktion aufgrufen wurde und rücke dementsprechend ein.
nö, das geht so nicht. so würdest du z.b. ein array mit

PHP-Code:
<?php
$arr 
= array(
  
'a' => array(
     
'a_a',
     
'a_b'.
  ),
  
'b' => 'b_a',
);
?>
so einrücken:

Code:
a 
  a_a
     a_b
       b
         b_a
... du willst aber folgendes:
Code:
a
  a_a
  a_b
b
  b_a
... ergo musst du rekursions-tiefen einrücken und nicht funktionsaufrufe und das funktioniert entweder so, wie ich's dir bereits geschrieben habe, oder mit einer zusätzlichen klassenvariable, die du vor dem erneuten aufruf der funktion inkrementierst und nach dem aufruf wieder runterzählst. das ist aber noch blöder zu verstehen.
axo ist offline   Mit Zitat antworten
Alt 24.10.2005, 15:00  
Benutzer
 
Registriert seit: 23.10.2005
Beiträge: 54
greg
Standard

Zitat:
nö, das geht so nicht. so würdest du z.b. ein array mit
Danke dass du aufgepasst hast. Es gibt tatsächlich Leute die nachdenken bevor sie etwas fressen ...

Ist mir beim schreiben schon klargeworden dass das so nicht hinhaut. Denn Funktionsaufrufe kann es ja jede menge mehr geben als Array - Tiefen. Jedoch wenn ich bei jedem Funktionsdurchlauf prüfe ob es sich um einen Array handelt und dementsprechend nur dann die Zahl hochsetze, dann müsste das doch passen.
Bin mir da aber noch nicht richtig sicher, das muss ich nachher mal testen.

Ich denke das ist so eine Mischung aus deinem ersten Vorschlag und deinem zweiten Vorschlag.

Nichs für ungut, ich probiers einfach mal aus.

Danke dir für deine Hilfe.
greg ist offline   Mit Zitat antworten
Alt 24.10.2005, 15:07  
Benutzer
 
Registriert seit: 10.09.2005
Beiträge: 67
N!cKY
N!cKY eine Nachricht über ICQ schicken
Standard

ich hab da mal vor einiger zeit was geschrieben *rauskram*:
PHP-Code:
<?php
function treemenu($array$level 0) {
    foreach(
$array AS $key => $val) {
        
$tabs '';
        for(
$i=0;$i<=$level;$i++) {
            
$tabs .= "\t";
        }
        
$type gettype($val);
        switch(
$type) {
            case 
"string":
                 
$type .= '('.strlen($val).')';
                 break;
            case 
"array":
                 
$type .= '('.count($val).')';
                 break;
            case 
"integer":
            case 
"float":
            case 
"double":
            case 
"resource":
                 
$type "(".$type.")";
                 break;
        }
        
printf("%s[%s] %s => %s\n"$tabs$key$type$val);
        if(
is_array($val)) {
            
treemenu($array[$key], $level+1);
        }
    }
}
?>
das macht eigentlich das was du willst!
aber warum ist print_r () unleserlich??
__________________

eagleScripts.de
N!cKY ist offline   Mit Zitat antworten
Alt 24.10.2005, 15:17  
Benutzer
 
Registriert seit: 23.10.2005
Beiträge: 54
greg
Standard

Ach ich hatte das Manual zu print_r und var_dump nur halb gelesen. Sowas kommt dann dabei raus. Folgender Code:

PHP-Code:
<?php
    $arr 
token_get_all("<? [url]www.phpfriend.de[/url] ?>");
    
$output print_r($arrtrue);
    echo 
"<pre>";
    echo 
$output;
    echo 
"</pre>";
?>
stellt alles wunderbar dar. Der Umbruch erfolgt bei print_r lediglich mit \n und nicht mit
-> daher müsste man die Seite im Plain ausgeben.

Folgende Funktion löst das Problem auch wunderbar (php.net/var_dump)

PHP-Code:
<?php
    
function show($data$func "print_r"$return_str false){
       
ob_start();
       
$func($data);
       
$output '<pre>'.htmlspecialchars(ob_get_contents()).'</pre>';
       
ob_end_clean();
       if(
$return_str) return $output; else echo $output;
    }
?>
Wusste ich gestern halt noch nicht
greg ist offline   Mit Zitat antworten
Alt 24.10.2005, 15:27  
Benutzer
 
Registriert seit: 10.09.2005
Beiträge: 67
N!cKY
N!cKY eine Nachricht über ICQ schicken
Standard

kannst auch einfach in den quelltet guckn!
__________________

eagleScripts.de
N!cKY ist offline   Mit Zitat antworten
Antwort


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
Turnierbaum aus array erstellen kingflo PHP-Fortgeschrittene 11 30.07.2008 11:32
Soapfault: Undefined Property Argi PHP-Fortgeschrittene 0 28.07.2008 11:17
mehrdimensionales Array in Klasse erstellen Nixwisser PHP Tipps 2007 2 01.08.2007 14:30
ARRAY: alle möglichen Kombinationen Tentacle PHP Tipps 2006 13 12.05.2006 00:18
Übersicht aus mehrdimensionalem Array erzeugen Crypi PHP-Fortgeschrittene 0 30.01.2006 13:44
Array auslesen andrew22 PHP Tipps 2006 3 21.01.2006 23:06
Array Formatierung PHP Tipps 2006 3 17.01.2006 19:12
Menü mit Unterpunkten supertramp Beitragsarchiv 7 18.10.2005 22:40
Problem beim vergleichen von 2 Arrays PHP Tipps 2005-2 1 06.10.2005 14:25
Sortieren von Arrays mit mehr als 2 Dimensionen (Teil 2) Buhmann PHP-Fortgeschrittene 4 12.07.2005 14:03
Array mit ID erstellen PHP Tipps 2005-2 25 06.06.2005 14:45
Elemente in mehrdimensionalem Array gezielt updaten PHP Tipps 2005 4 29.04.2005 15:18
[Erledigt] Mehrdimensionales Array in eindimensionales Array umwandeln PHP-Fortgeschrittene 3 03.01.2005 22:31
Abfrage mit id aus anderer Tabelle suter PHP Tipps 2004-2 15 16.12.2004 14:25

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php baumstruktur darstellen, baumdiagramm erstellen, html baumdiagramm, php baumdiagramm, baumdiagramm html, baumdiagramme erstellen, baumdiagramm erstellen online, baumdiagramm online erstellen, baumdiagramm php, baumdiagramm programmieren, html baumstruktur darstellen, baumdiagramme php, baumdiagramm, wie könnte ein baumdiagramm für das alter von bäumen aussehen, baumdiagramm in html, baumstruktur darstellen, binärbaum mit array darstellen, baumdiagramm als mehrdimensionales array darstellen, php baumdiagramm zeichnen, php array in ein baumdiagramm schreiben

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:50 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

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.