+ Antworten
Ergebnis 1 bis 10 von 10

Thema: foreach und reg_exp

  1. #1
    TP-Veteran Daniel N. ist auf einem guten Weg Avatar von Daniel N.
    Registriert seit
    Sep 2002
    Ort
    Schweiz
    Beiträge
    1.307

    foreach und reg_exp

    hi tp-bewohner

    also ich hab da grad so meine probleme mit foreach. wenn ich das prinzip richtig verstanden habe, wird das ganze array durchgelaufen und für jeden einzelnen zeiger werden die anweisungen durchgeführt. soweit korrekt?

    gut, nur will das irgendwie bei mir nicht so (wahrscheinlich seh ich nur mal wieder den wald nimmer).

    folgendes:

    PHP-Code:
    $array = array ('label' => 'value'); 

    foreach (
    $array as $key => $value)
            {
            
    $regexp "/{{".$key."}}/";
            
    $replace eregi_replace($regexp$value$string);
            } 
    über das regexp pattern braucht ihr euch nicht fragen, das macht keinen grossen sinn, wichtig ist nur, das dabei '$key' aufgerufen wird.

    das problem ist jetzt, dass nur eine der werte im array ersetzt wird, der rest wird stillschweigend ignoriert... woran liegt das? ein denkfehler nehme ich jetzt mal an...

    Passt auf, ich bin überheblich

    http://orangetree.ch-gnu.ath.cx

  2. #2
    TP-Insider skipperjan ist ein richtiges Arbeitstier - DANKE skipperjan ist ein richtiges Arbeitstier - DANKE skipperjan ist ein richtiges Arbeitstier - DANKE skipperjan ist ein richtiges Arbeitstier - DANKE skipperjan ist ein richtiges Arbeitstier - DANKE skipperjan ist ein richtiges Arbeitstier - DANKE Avatar von skipperjan
    Registriert seit
    Jan 2005
    Ort
    Düsseldorf
    Beiträge
    981
    Naja,

    du musst das $array[$key]´te Element halt auch noch überschreiben.

    Ich hab mal das kleine BSP. gebastelt:
    PHP-Code:
    $array = array (
        
    'label_1' => 'Dies ist eine weitere Möglichkeit',
        
    'label_2' => 'Dies ist eine weitere Chance',
        
    'label_3' => 'Dies ist eine schönes Mädchen',
        
    'label_4' => 'Dies ist eine schönes Auto',
        
    'label_5' => 'Dies ist eine große Katastrophe'
        
    );  
    foreach (
    $array as $key => $value)
            {
            
    $array[$key]=eregi_replace("ist","war",$value);
            } 
            
    print_r($array); 
    Hoffe es hilft dir weiter,

    so long,

    skip
    Chenaski - Klamotten designed by Pete
    USE - nicht immer nur mit Stars and Stripes rumlaufen!

    Hunde in der Großstadt: Guck mal wo ich fast reingetreten bin.....

  3. #3
    TP-Veteran Daniel N. ist auf einem guten Weg Avatar von Daniel N.
    Registriert seit
    Sep 2002
    Ort
    Schweiz
    Beiträge
    1.307
    hmm.. nee das kann so bei mir nicht funktionieren. das ganze befindet sich in einer funktion und ich will dabei "$replace" zurückgeben und nicht das array an sich... hmmm...

    Passt auf, ich bin überheblich

    http://orangetree.ch-gnu.ath.cx

  4. #4
    TP-Insider skipperjan ist ein richtiges Arbeitstier - DANKE skipperjan ist ein richtiges Arbeitstier - DANKE skipperjan ist ein richtiges Arbeitstier - DANKE skipperjan ist ein richtiges Arbeitstier - DANKE skipperjan ist ein richtiges Arbeitstier - DANKE skipperjan ist ein richtiges Arbeitstier - DANKE Avatar von skipperjan
    Registriert seit
    Jan 2005
    Ort
    Düsseldorf
    Beiträge
    981
    ?

    Wo liegt der Sinn, ein array via foreach zu durchlaufen, wenn man immer die Variable $replace überschreibt? (Wo kommt eigentlich ?string her und was steht da drin?)

    So kann natürlich nur ein Wert übergeben werden, der letzte des arrays, um genau zu sein.

    Wenn du also alle geänderten Werte zurückgeben willst oder alle $replace Werte, dann musst du entweder einen aufaddierten String oder ein array zurückgeben.

    Ich würde ja vorschlagen $replace[]=........
    Dann gibst du wohin auch immer das array aller Ersetzungen.

    Beim jetzigen Informationsstand bleibt einem der Sinn jedoch verborgen, mir ist in keiner Weise klar, was du vorhast.

    In deinem Konstrukt macht so jedenfalls keine Schleife der Welt Sinn

    So long,

    Skip
    Chenaski - Klamotten designed by Pete
    USE - nicht immer nur mit Stars and Stripes rumlaufen!

    Hunde in der Großstadt: Guck mal wo ich fast reingetreten bin.....

  5. #5
    TP-Veteran Daniel N. ist auf einem guten Weg Avatar von Daniel N.
    Registriert seit
    Sep 2002
    Ort
    Schweiz
    Beiträge
    1.307
    ahh... so langsam kommen wir dem also auf die spur

    also, ich klär dich mal weiter n bischen auf:

    es geht um einen template parser, somit dürfte es bei dir schon geklingelt haben... nein? auch gut, dann klär ich dich auf:

    PHP-Code:
    public function setRplVar($label$content)    
            {
            if(
    $label != preg_match("/[^a-zA-Z]/"$label))
                    {
                    die(
    "\$err_id: 2 \"Placeholder does not match requirements\"");
                    }
                    
    $this->varList[$label] = $content;                
            }
    ...

    ...

    public function 
    viewParsedTpl($tpl)
            {
            if ( (!
    file_exists($this->TplDir "/" $tpl)) )
                {
                die(
    "\$err_id: 1 \"Template file not found\"");
                }                
                    
    $getTpl file_get_contents($this->TplDir "/" $tpl);
                    
    // übergabe an die parser funktion 
    echo $this->parseTpl($getTpl); 
            }

    ...

    ...

    public function 
    parseTpl($getTpl)
            {
            foreach (
    $this->varList as $key => $value
                {
                
    $regex_var "\{(".strtoupper($key).")\}";
                    
    $this->getTpl eregi_replace($regex_var$value$getTpl);
                }
                
            return 
    $this->getTpl;
            } 
    irgendwie fällt mir da grad kein sinnvoller weg ein die variable nicht zu überschreiben :/

    Passt auf, ich bin überheblich

    http://orangetree.ch-gnu.ath.cx

  6. #6
    TP-Insider skipperjan ist ein richtiges Arbeitstier - DANKE skipperjan ist ein richtiges Arbeitstier - DANKE skipperjan ist ein richtiges Arbeitstier - DANKE skipperjan ist ein richtiges Arbeitstier - DANKE skipperjan ist ein richtiges Arbeitstier - DANKE skipperjan ist ein richtiges Arbeitstier - DANKE Avatar von skipperjan
    Registriert seit
    Jan 2005
    Ort
    Düsseldorf
    Beiträge
    981
    file_get_contents:
    Diese Funktion ist mit file() identisch, außer dass file_get_contents() die Datei in einem String zurückgibt.

    OK

    Du liest also eine Datei in einen String ein, verstanden soweit.

    Dann hast du ein nicht näher definiertes Array, $this->varList, in welchem wohl die Template-Transformationen drinstehen, deine Parser Infos.

    Was zeigt er dir denn, wenn du print_r($this->varList) über dein Array laufen lässt?

    Ist das Überhaupt ein array?
    Was steht da drin?

    Sei mir nicht böse, aber so ganz kann ich dem Ganzen noch nicht folgen.
    Was wird denn zurückgegeben? Was kommt raus bei dem Gedöns?

    So long,

    skip
    Chenaski - Klamotten designed by Pete
    USE - nicht immer nur mit Stars and Stripes rumlaufen!

    Hunde in der Großstadt: Guck mal wo ich fast reingetreten bin.....

  7. #7
    TP-Veteran Daniel N. ist auf einem guten Weg Avatar von Daniel N.
    Registriert seit
    Sep 2002
    Ort
    Schweiz
    Beiträge
    1.307
    sorry, wenn man etwas selber geschrieben hat neigt man dazu, davon auszugehen das jeder das prinzip sofort versteht

    aber du hast das schon ganz gut begriffen, in dem array steht einerseits die zu ersetzende variable und andererseits mit was sie ersetzt werden soll.

    und ja: es ist tatsächlich ein array (welch wunder ).. print_r ergibt eine ausgabe in folgendem stil:
    Code:
    Array ( [var1] => var1replacement [var2] => var2replacement )

    Passt auf, ich bin überheblich

    http://orangetree.ch-gnu.ath.cx

  8. #8
    TP-Veteran Daniel N. ist auf einem guten Weg Avatar von Daniel N.
    Registriert seit
    Sep 2002
    Ort
    Schweiz
    Beiträge
    1.307
    hmm.. keiner mehr ne idee??

    Passt auf, ich bin überheblich

    http://orangetree.ch-gnu.ath.cx

  9. #9
    TP-Special Mod steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    Dein Problem steckt hier:

    $this->getTpl = eregi_replace($regex_var, $value, $getTpl);

    Die ganze Schleife macht keinen Sinn, da nur der letzte Durchgang genommen wird.

    Du müsstest am Anfang $this->getTpl=$getTpl setzen, und dann auch immer
    $this->getTpl = eregi_replace($regex_var, $value, $this->getTpl);


    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer


  10. #10
    TP-Veteran Daniel N. ist auf einem guten Weg Avatar von Daniel N.
    Registriert seit
    Sep 2002
    Ort
    Schweiz
    Beiträge
    1.307
    ahhhh.... mein schatzi

    tausend dank steffen... obwohl ich da auch selber drauf kommen hätte müssen

    Passt auf, ich bin überheblich

    http://orangetree.ch-gnu.ath.cx

+ Antworten

Aktive Benutzer

Aktive Benutzer

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

     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51