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
freelancermap.de - IT Projektvermittlung für Selbständige und Freiberufler
  #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.764
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

PHP Marktplatz-Software
PHP Marktplatz-SoftwareEs hat sich viel getan! Die neue Version 7.5.9 unserer PHP Marktplatz-Software ebiz-trader steht ab sofort zur Verfügung.

28.10.2019 | Berni

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni


 

Aktuelle PHP Scripte

SMT

Server Monitoring & Management Tool Das SMT wurde von einem Administrator für Administratoren entwickelt, es vereinfacht den Alltag in der klassischen Administration und Verwaltung. Mit dem SMT kannst Du alle Deine Server & Dienste verwalten und überwach

04.09.2020 palle_1977 | Kategorie: PHP
numaeks Web-Farbmixer

Die RGB-Farben lassen sich hier auf unterschiedliche Weise mischen. Zur Einstellung werden auch die Dreh- und Schieberegler mit Canvas verwendet. Gespeichert werden die Farben in einem Cookie.

04.09.2020 numaek | Kategorie: JAVASCRIPT/ Tools
phplinX-Erotikportal 4 ansehen phplinX-Erotikportal 4

Erweiterbares Portal speziell für Erotik mit den Modulen Webkatalog, Bannermanagement und Kleinanzeigenmarkt. Sämtliche Module können über einen einzigen Adminbereich verwaltet werden.

18.06.2020 Cosinus14 | Kategorie: PHP/ Anzeigenmarkt
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 05:49 Uhr.