 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
06.09.2005, 10:32
|
#1
|
|
TP-Veteran
Registriert seit: Sep 2002
Ort: Schweiz
|
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...
|
|
|
06.09.2005, 11:25
|
#2
|
|
TP-Moderator
Registriert seit: Jan 2005
Ort: Düsseldorf
|
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.....
|
|
|
06.09.2005, 12:52
|
#3
|
|
TP-Veteran
Registriert seit: Sep 2002
Ort: Schweiz
|
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...
|
|
|
06.09.2005, 13:12
|
#4
|
|
TP-Moderator
Registriert seit: Jan 2005
Ort: Düsseldorf
|
?
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.....
|
|
|
06.09.2005, 16:06
|
#5
|
|
TP-Veteran
Registriert seit: Sep 2002
Ort: Schweiz
|
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 :/
|
|
|
06.09.2005, 16:54
|
#6
|
|
TP-Moderator
Registriert seit: Jan 2005
Ort: Düsseldorf
|
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.....
|
|
|
06.09.2005, 17:57
|
#7
|
|
TP-Veteran
Registriert seit: Sep 2002
Ort: Schweiz
|
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 )
|
|
|
07.09.2005, 16:57
|
#8
|
|
TP-Veteran
Registriert seit: Sep 2002
Ort: Schweiz
|
hmm.. keiner mehr ne idee??
|
|
|
07.09.2005, 17:27
|
#9
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
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);
|
|
|
07.09.2005, 19:31
|
#10
|
|
TP-Veteran
Registriert seit: Sep 2002
Ort: Schweiz
|
ahhhh.... mein schatzi
tausend dank steffen... obwohl ich da auch selber drauf kommen hätte müssen 
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| 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.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 19:12 Uhr.
|
 |