php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 06-11-2006, 22:52
Caarcrinolas
 Newbie
Links : Onlinestatus : Caarcrinolas ist offline
Registriert seit: Dec 2005
Beiträge: 13
Caarcrinolas ist zur Zeit noch ein unbeschriebenes Blatt
Unhappy [Funktion] Rekursives Array aller Templateblöcke -Funktion fehlerhaft-

Hi,

ich habe Probleme mit meiner rekursiven Funktion, die die Aufgabe hat alle Blöcke rekursiv zu holen und in ein Array so abzulegen das die Eltern Blöcke alle ihre Kinder untergeordnet bekommen.

Dazu hab ich im ersten Schritt versucht lediglich die Blocknamen rauszufischen, dabei tritt eine für mich nicht wirklich replizierbare Fehlerquelle auf.

PHP-Code:
function _buildBlocks2($string,$cur_block="")
{
    
preg_match_all(sprintf($this->s_block,'.*?'),$string,$matches,PREG_SET_ORDER);
    foreach (
$matches as $match)
    {
        
$temp = array('name' => $match[1]); 
        if ( 
preg_match_allsprintf($this->s_block,'.*?'),$match[2],$blocks,PREG_SET_ORDER) )
        {
            
$temp['children']=array();
            foreach (
$blocks as $block)
                
$temp['children'][]=$this->_buildBlocks2($match[2],$block[1]);
        }
    }
    return 
$temp;

Gewünscht ist:
Block A
Block B
..||
..Block B1.1
.....|| Block B1.1.1
.........|| Block B1.1.1.1
.........|| Block B1.1.1.2
Block C


Erhalten hab ich das hier
Block B
...||
...Block C
...Block C


Das Problem ist das ich weiss, dass im Code wo der Wurm drin ist aber nicht wo.
BTW: Wie bekommt ihr das mit den rekursiven Funktionen in den Griff?

Mit Zitat antworten
  #2 (permalink)  
Alt 06-11-2006, 22:57
Kropff
  Administrator
Links : Onlinestatus : Kropff ist offline
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.722
Kropff befindet sich auf einem aufstrebenden Ast
Standard

auf den ersten blick:
PHP-Code:
$temp['children'][]=$this->_buildBlocks2($match[2],$block[1]); 
hast du das als klasse aufgebaut? ansonsten
PHP-Code:
$temp['children'][]=buildBlocks2($match[2],$block[1]); 
gruß
peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
Mit Zitat antworten
  #3 (permalink)  
Alt 06-11-2006, 23:19
Caarcrinolas
 Newbie
Links : Onlinestatus : Caarcrinolas ist offline
Registriert seit: Dec 2005
Beiträge: 13
Caarcrinolas ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von Kropff
hast du das als klasse aufgebaut?
gruß
peter
Sorry, das ich es nicht erwähnt habe.
Aber es handelt sich um eine Methode
Mit Zitat antworten
  #4 (permalink)  
Alt 06-11-2006, 23:56
3DMax
 PHP Senior
Links : Onlinestatus : 3DMax ist offline
Registriert seit: Jan 2004
Beiträge: 1.916
3DMax ist zur Zeit noch ein unbeschriebenes Blatt
Standard Re: [Funktion] Rekursives Array aller Templateblöcke -Funktion fehlerhaft-

Zitat:
Original geschrieben von Caarcrinolas
BTW: Wie bekommt ihr das mit den rekursiven Funktionen in den Griff?
joh, rekursion ist ganz schön tricky

ich habe es in meiner template klasse http://www.php-resource.de/forum/sho...threadid=76955 so umgesetzt:

die blöcke werden nicht in einem klassen-array gespeichert, sondert es wird ein objektbaum aus templateobjekten rekursiv aus den blöcken aufgespannt. hört sich jetzt vielleicht kompliziert an, aber ist es auch - ne, ich fand es einfacher als ein globales array zu benutzen (hatte ich auch mal umgesetzt und fand die array-referenzen zu umständlich)
vielleicht hilft es dir als ansatz weiter, hier die methode dazu:
PHP-Code:
  /**
   * Builds the template object tree of (nested) blocks, if exists.
   *
   * Replaces all matches of search pattern ($this->block_regex) in template
   * content by the name of block embedded in left and right delimiters.
   * This template vars will be itialize by an empty string.
   * Creates new class instance(s) with given html content(s) of search pattern.
   * This works recursive, if sub template object(s) contains nested block(s).
   */
  
private function _extractBlocks()
   {
    if(
preg_match_all($this->block_regex$this->content$matches))
     {
      
$class_name=get_class($this);

      for(
$i=0$i<count($matches[0]); $i++)
       {
        
// matches[0][$i] contains the full pattern matched.
        // matches[1][$i] contains the template variable/block name.
        // matches[2][$i] contains the html content.
        
$search=$matches[0][$i];
        
$replace=$this->left_delimiter.$matches[1][$i].$this->right_delimiter;
        
$this->content=str_replace($search$replace$this->content);

        
$this->blocks[$matches[1][$i]]=new $class_name();
        
$this->blocks[$matches[1][$i]]->loadString($matches[2][$i]);
        
$this->vars[$matches[1][$i]]='';
       }
      }
    } 
Mit Zitat antworten
  #5 (permalink)  
Alt 07-11-2006, 14:29
Caarcrinolas
 Newbie
Links : Onlinestatus : Caarcrinolas ist offline
Registriert seit: Dec 2005
Beiträge: 13
Caarcrinolas ist zur Zeit noch ein unbeschriebenes Blatt
Standard Re: Re: [Funktion] Rekursives Array aller Templateblöcke -Funktion fehlerhaft-

Zitat:
Original geschrieben von 3DMax
joh, rekursion ist ganz schön tricky

ich habe es in meiner template klasse http://www.php-resource.de/forum/sho...threadid=76955 so umgesetzt:

die blöcke werden nicht in einem klassen-array gespeichert, sondert es wird ein objektbaum aus templateobjekten rekursiv aus den blöcken aufgespannt. hört sich jetzt vielleicht kompliziert an, aber ist es auch - ne, ich fand es einfacher als ein globales array zu benutzen (hatte ich auch mal umgesetzt und fand die array-referenzen zu umständlich)
Wenn ich ehrlich bin bevorzuge ich ein Klassenarray

Vielleicht fällt ja dem einen oder Anderen Rekursiv Experten etwas auf, zumal die Pattern generell treffen
Mit Zitat antworten
  #6 (permalink)  
Alt 09-11-2006, 14:50
Caarcrinolas
 Newbie
Links : Onlinestatus : Caarcrinolas ist offline
Registriert seit: Dec 2005
Beiträge: 13
Caarcrinolas ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Das keiner die Antwort weiss ist recht unwahrscheinlich.....
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre 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


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

PHP Server Monitor

PHP Server Monitor ist ein Skript, das prüft, ob Ihre Websites und Server betriebsbereit sind.

11.09.2018 Berni | Kategorie: PHP/ Security
PHP WEB STATISTIK ansehen PHP WEB STATISTIK

Die PHP Web Statistik bietet Ihnen ein einfach zu konfigurierendes Script zur Aufzeichnung und grafischen und textuellen Auswertung der Besuchern Ihrer Webseite. Folgende zeitlichen Module sind verfügbar: Jahr, Monat, Tag, Wochentag, Stunde Folgende son

28.08.2018 phpwebstat | Kategorie: PHP/ Counter
Affilinator - Affilinet XML Produktlisten Skript

Die Affilinator Affilinet XML Edition ist ein vollautomatisches Skript zum einlesen und darstellen der Affili.net (Partnerprogramm Netzwerk) Produktlisten und Produktdaten. Im Grunde gibt der Webmaster seine Affilinet PartnerID ein und hat dann unmittelb

27.08.2018 freefrank@ | Kategorie: PHP/ Partnerprogramme
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 10:16 Uhr.