php.de

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

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 03.05.2005, 14:58  
Gast
 
Beiträge: n/a
Standard Besser Programmieren (!?)

Hallo,

ich arbeite gerade an einer Funktion, und in dieser mache ich im Prinzip 4 mal das Gleiche, nur verschachtelt.

Wenn ich mir diese Funktion so ansehe - kommt mir der Gedanke das dies wohl wesentlich besser geht.

Dieses Array (=vereinfachte Darstellung) gilt es zu verarbeiten (4 Stufig)
Code:
Array
(
    [0] => Array
        (
            [menuID] => 00000000
            [siteID] => 0
            [child] => Array
                (
                    [0] => Array
                        (
                            [menuID] => 00010000
                            [siteID] => 21
                            [child] => Array
                                (
                                    [0] => Array
                                        (
                                            [menuID] => 00010100
                                            [siteID] => 26
                                            [child] => Array
                                                (
                                                    [0] => Array
                                                        (
                                                            [menuID] => 00010101
                                                            [siteID] => 27
                                                        )

                                                    [1] => Array
                                                        (
                                                            [menuID] => 00010102
                                                            [siteID] => 28
                                                        )

                                                    [2] => Array
                                                        (
                                                            [menuID] => 00010103
                                                            [siteID] => 29
                                                        )

                                                )

                                        )

                                )

                        )

                    [1] => Array
                        (
                            [menuID] => 00020000
                            [siteID] => 22
                        )

                    [2] => Array
                        (
                            [menuID] => 00030000
                            [siteID] => 23
                            [child] => Array
                                (
                                    [0] => Array
                                        (
                                            [menuID] => 00030100
                                            [siteID] => 24
                                        )

                                )

                        )

                )

        )

    [1] => Array
        (
            [menuID] => 01000000
            [siteID] => 1
            [child] => Array
                (
                    [0] => Array
                        (
                            [menuID] => 01010000
                            [siteID] => 2
                        )

                    [1] => Array
                        (
                            [menuID] => 01020000
                            [siteID] => 3
                            [child] => Array
                                (
                                    [0] => Array
                                        (
                                            [menuID] => 01020100
                                            [siteID] => 4
                                            [child] => Array
                                                (
:
:
usw.
mit dieser Funktion möchte ich eine Aufzählungsliste erstellen:
PHP-Code:
<?php
function build_BulletList($ary_Nested) {
    
    
$str_BulletList '<ul>';
    
    
/*level1*/
    
foreach ($ary_Nested as $ary_MenuItem) {
        
        
$str_BulletList.= '[*]'.$ary_MenuItem['menuID'];
        
        
        
/*level2*/
        
if ( isset($ary_MenuItem['child']) )  {
            
            
$str_BulletList.= '<ul>';
            foreach (
$ary_MenuItem['child'] as $ary_MenuItem_level2) {
                
                
$str_BulletList.= '[*]'.$ary_MenuItem_level2['menuID'];
                
                
                
/*level3*/
                
if ( isset($ary_MenuItem_level2['child']) )  {
                    
                    
$str_BulletList.= '<ul>';
                    foreach (
$ary_MenuItem_level2['child'] as $ary_MenuItem_level3) {
                        
                        
$str_BulletList.= '[*]'.$ary_MenuItem_level3['menuID'];
                        
                        
                        
/*level4*/
                        
if ( isset($ary_MenuItem_level3['child']) )  {
                            
                            
$str_BulletList.= '<ul>';
                            foreach (
$ary_MenuItem_level3['child'] as $ary_MenuItem_level4) {
                                
                                
$str_BulletList.= '[*]'.$ary_MenuItem_level4['menuID'].'';
                                
                                
                            }
                            
$str_BulletList.= '[/list]';
                        }
                        
/*level4 ENDE*/
                        
                        
                        
$str_BulletList.= '';
                    }
                    
$str_BulletList.= '[/list]';
                }
                
/*level3 ENDE*/
                
                
                
$str_BulletList.= '';
            }
            
$str_BulletList.= '[/list]';
        }
        
/*level2 ENDE*/
        
        
        
$str_BulletList.= '';
    }
    
$str_BulletList.= '[/list]';
    
    return 
$str_BulletList;
}

echo 
build_BulletList$ary_Test );
?>
Funktioniert auch, aber gibt es da nicht die Möglichkeit [rekursiv], dann wäre ich auch von der Schachteltiefe unabhängig.

Kann mir mal jemand einen TIPP geben, bzw. Anschubhilfe. Ich kriege es irgentwie nicht in meinen Kopf.
 
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 03.05.2005, 17:02  
Erfahrener Benutzer
 
Registriert seit: 29.10.2004
Beiträge: 1.783
derHund
Standard

hmm,

ja, du sagst es ja schon .. rekursiv ...
gibt einfach nach dem ersten level das array an die funktion weiter.
PHP-Code:
function build_BulletList(&$ary_Nested) {
  
$str_BulletList '<ul>';
  
/*level*/
  
foreach ($ary_Nested as $ary_MenuItem) {
    
$str_BulletList .= '[*]'.$ary_MenuItem['menuID'];
    if (isset(
$ary_MenuItem['child'])) {
      
$str_BulletList .= build_BulletList($ary_MenuItem['child'])
    }
    
$str_BulletList .= '';
  }
  
$str_BulletList .= '[/list]';
  return 
$str_BulletList;

jetzt mal völlig ungetestet (was ich ungern mache), aber als ansatz? rekursion eben *g*

Zitat:
Ich kriege es irgentwie nicht in meinen Kopf.
stell dir einfach vor, du hättest nur zwei ebenen ...
__________________
derHund ist offline  
Alt 03.05.2005, 17:02  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Wo ist dein Problem? Rufe in Abhängigkeit von deinem isset(child) einfach die Funktion nochmal auf und übergib ihr den entsprechenden Teilbaum. Das Ergebnis hängst du auch einfach an deinen bisghertigen String an.

Basti

...da war wohl einer schneller *g - Der Parameter braucht aber keine Referenz zu sein, das "&" also einfach weglassen.
Basti ist offline  
Alt 04.05.2005, 10:29  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von derHund
jetzt mal völlig ungetestet (was ich ungern mache), aber als ansatz? rekursion eben *g*
Prima, hat auf anhieb funktioniert........


DANKE
 
Alt 04.05.2005, 11:05  
Erfahrener Benutzer
 
Registriert seit: 29.10.2004
Beiträge: 1.783
derHund
Standard

schön - dann hab ich ja glück gehabt.
__________________
derHund ist offline  
Alt 04.05.2005, 11:43  
Gast
 
Beiträge: n/a
Standard

Vielleicht mal über XML nachgedacht ?! ..
Dann brauchst den ganzen Schnulli net
und auserdem ist das dann auch gleich viel
schöner, und auch leichter zu plegen.

MfG
 
Alt 04.05.2005, 12:39  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von dogo
Vielleicht mal über XML nachgedacht ?! ..
Dann brauchst den ganzen Schnulli net
und auserdem ist das dann auch gleich viel
schöner, und auch leichter zu plegen.
?

Na dann, da bin ich offen für einen Vorschlag, anbei siehst Du das gesamte ITEM innerhalb des Array, evtl. kommt da noch mehr wie z.B. [textEN].

Code:
    [0] => Array
        (
            [menuID] => 00000000
            [siteID] => 0
            [state] => online
            [href] => http://domain.de/
            [textDE] => Home
            [titleDE] => Titeltext
            [child] => Array
                (
                    [0] => Array
                        (
                            [menuID] => 00010000
                            [siteID] => 21
                            [state] => online
                            [href] => menue.php?site=00010000
                            [textDE] => Site_00010000
                            [titleDE] => Titeltext
                            [child] => Array
                                (
Ursprünglich kommt folgendes Array/Tabelle zum Einsatz:
Code:
array(

array(	'menuID'=> '00000000',
		'siteID'=> '0',
		'state'=> 'online'	,
		'href'=> 'http://domain.de/',
		'textDE'=> 'Home',
		'titleDE'=> 'Titeltext',
		),
		
array(	'menuID'=> '00010000',
		'siteID'=> '21',
		'state'=> 'online',
		'href'=> 'menue.php?site=00010000',
		'textDE'=> 'Site_00010000',
		'titleDE'=> 'Titeltext'	,
		),
		
usw.
 
Alt 04.05.2005, 12:40  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.818
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

du erzählst also erst _jetzt_, dass die daten aus einer datenbank kommen?
da macht doch das ganze rekursive zeug doch keinen sinn mehr! oder willst du jedes mal alle seiten eines menüs komplett auslesen und verarbeiten?
http://pear.php.net/package/DB_NestedSet
axo ist offline  
Alt 04.05.2005, 13:18  
Erfahrener Benutzer
 
Registriert seit: 29.10.2004
Beiträge: 1.783
derHund
Standard

Zitat:
oder willst du jedes mal alle seiten eines menüs komplett auslesen und verarbeiten?
vielleicht wars nur der erste schritt? vielleicht läßt sichs parametrisieren? und damit flexibel einsetzen?

nested_sets ist sch ... hat einige rattenschwänze. meiner meinung nach.
__________________
derHund ist offline  
Alt 04.05.2005, 14:22  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von axo
du erzählst also erst _jetzt_, dass die daten aus einer datenbank kommen?
..könnten, genauso könnte es eine Handgepflegte Tabelle sein !!!!!

Zitat:
Zitat von axo
oder willst du jedes mal alle seiten eines menüs komplett auslesen und verarbeiten?
Verarbeiten, genau 1mal bis zur Änderung, dafür gibt es ja serverseitiges Caching ( siehe PEAR::Cache_Lite /THREAD ),
des weiteren gibt es auch intelligentes clientseitiges Caching mit Entity-Tag. ( siehe ETag + PHP-Sessions /THREAD )

Zitat:
Zitat von derHund
vielleicht läßt sichs parametrisieren?
Eben - Was Du oben siehst ist ja die gesamte Ausgabe, ich benötige aber auch diese MenuItems in verschiedenen Variationen. Mal Nested und Block gemischt, mal Nested bis ganz unten, mal nur Block. Halt alles was es an Navigationsmöglichkeiten gibt, bzw. je nachdem wie ich es für das Markup benötige.

Ich weiß - geht alles mit PEAR:B_NestedSet oder auch eben nicht.



@dogo
Und was ist jetzt mit XML? Ich habe noch nicht mal einen gedanklichen Ansatz wie mit XML da eine bessere Lösung zustande kommen könnte.
 
 


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
Chat programmieren => Was beachten? noBody PHP Tipps 2008 10 01.08.2009 11:30
Besser: Datum mit PHP oder MySQL? SilentSight PHP Tipps 2008 16 21.07.2008 14:33
Framework programmieren Kein Genie PHP-Fortgeschrittene 2 29.04.2008 16:57
Programmieren in PHP: Eine Einführung KingCrunch Tutorials 62 05.03.2008 16:56
Wie programmieren? dh1sbg Off-Topic Diskussionen 5 02.03.2007 15:59
Frist überprüfen - + Tippspiel programmieren havok Datenbanken 5 20.09.2005 10:11
Würfel programmieren Datenbanken 4 19.08.2005 17:43
PHP - Webseiten dynamisch programmieren PHP Tipps 2005-2 4 31.07.2005 16:36
Community in Modulen programmieren Beitragsarchiv 3 29.07.2005 17:17
internetauftritt in php programmieren PHP Tipps 2005-2 11 25.07.2005 20:55
Was ist besser Photoshop 7.0 oder Fireworks von Macromedia ? Off-Topic Diskussionen 14 25.02.2005 12:21
[Erledigt] [OT] besser eine Tabelle mit mehr Spalten oder aufteilen ? Datenbanken 1 22.10.2004 17:26
[Erledigt] Vokabelabfrage per Formular / Besser in PHP oder DB ? PHP Tipps 2004 5 21.08.2004 20:21
Welches Layout ist besser? themonk Off-Topic Diskussionen 38 04.08.2004 16:57

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php besser programmieren, besser programmieren, php?siteid= programmierung

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