CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden |
17.08.2007, 11:53:16
|
Anfänger
|
|
Registriert seit: Aug 2007
Beiträge: 10
|
|
Referenz auf Teilstring?
Hallo zusammen,
ich würde gerne eine Referenz auf einen Teilstring erzeugen, jedoch weiß ich nicht, ob/wie so etwas realisierbar ist.
Die Anwendung soll wie folgt aussehen:
$string = "Hello World!";
$referenz = &$teilstring_mit_inhalt_hello;
$referenz = "olleH";
echo $string; (soll ausgeben "olleH World!")
Dieses Beispiel möchte ich dann später umfangreicher verwenden, indem ich nach einem bestimmten Suchmuster eine Reihe von Teilstrings in einem Array speichere und anschließend ggf. einzelne Teilstrings verändere und diese durch die Referenz im ursprünglichen String automatisch entsprechend verändert sind.
Kann mir jemand helfen?
Geändert von sigurd (17.08.2007 um 11:54:10 Uhr)
|
18.08.2007, 21:51:12
|
Junior Member
|
|
Registriert seit: Jun 2004
Beiträge: 473
|
|
AW: Referenz auf Teilstring?
Keine Ahnung was du dir genau unter Referenz vorstelltst, aber reicht es nicht den String bei der Ausgabe vorzukauen?
PHP-Code:
$string='Nur ich bin Raketenmann';
$wortliste=array('Raketenmann','irgendwasanderes','Nur');
for($z=0;$z<count($wortliste);$z++)
{
$string=str_replace($wortliste[$z],strrev($wortliste[$z]),$string);
}
echo $string;
Ergibt: ruN ich bin nnamnetekaR
Geändert von Raketenmann (18.08.2007 um 21:53:28 Uhr)
|
20.08.2007, 09:53:40
|
Anfänger
|
|
Registriert seit: Aug 2007
Beiträge: 10
|
|
AW: Referenz auf Teilstring?
Hm, ich glaub, du hast Recht.
|
20.08.2007, 10:12:06
|
|
Junior Member
|
|
Registriert seit: Mar 2006
Beiträge: 415
|
|
AW: Referenz auf Teilstring?
Hab das Thema jetzt erst bemerkt.
Also das was Du erreichen möchtest ist zweifellos _möglich_, die Frage ist nur, ob Du Dir die Mühe machen möchtest das zu implementieren.
Du könntest etwa eine Klasse mit folgenden Eigenschaften implementieren; - Der Inhalt ist ein eindimensionales Array welches PHP-Zeichenketten enthält.
- Wird eine neue Referenz auf eine Teilzeichenkette v erzeugt wobei uvw der gesamte Text ist, so wird das Array in drei Element mit den Zeichketten u, v, w aufgeteil.
- Die Referenz auf einen Teil wird durch ihren Index dargestellt.
Das Modell ist nicht ganz vollständig und ich habe ein par kleine aber wichtige Eckdaten verschwiegen, aber so würde das dann vermutlich laufen. Eine Menge Aufwand, der sich möglicherweise gar nicht lohnt.
Es kommt halt darauf an, was Du abgefahrenes damit vor hast.
Die Lösung von Raketenmann funktioniert zweifellos, dürfte aber bei langen Texten und vielen Teiltexten recht teuer werden.
Was passiert zum Beispiel wenn sich Teile überlappen? Ist das überhaupt legal???
Solche Spezifikationen muss man sich halt immer vorher durch den Kopf gehen lassen.
__________________
Bitte sprich entweder deutsch oder englisch mit mir, aber nicht beides gleichzeitig.
----------
Bitte vor dem Fragen lesen: Wie man Fragen richtig stellt.
|
20.08.2007, 14:58:31
|
Anfänger
|
|
Registriert seit: Aug 2007
Beiträge: 10
|
|
AW: Referenz auf Teilstring?
Hi z0iD, ich glaube, deinen Ansatz verstanden zu haben, werde ihn aber gleich nochmal in meinen Worten wiederholen, um sicher zu gehen.
Was ich vorhabe: Das Thema "Templates" zur Trennung von HTML- und PHP-Code finde ich interessant und möchte bestehende Template-Systeme nicht nur anwenden, sondern selber einmal so eine kleine Template-Engine schreiben. Dabei würde ich weitgehend die verbreitete Syntax aus bestehenden Template-Systemen übernehmen (zu ersetzende Stellen durch {name} z.B. markieren). Also dachte ich mir, ich könnte das Template doch einfach einlesen, die zu ersetzenden Felder referenzieren und bequem durch den jeweiligen Inhalt so ersetzen.
Dein Ansatz:
- Ich lese das Template in einen referenzierten eindimensionalen Array aus, wodurch sich der Inhalt nun in 0ter Position befindet
- Wenn ich ein zu ersetzendes Feld finde, ändere ich den Array so ab, dass der Inhalt VOR der Zeichenkette sich in 0ter Position befindet, die Zeichenkette selbst in 1ter und der Rest in 2ter
- Nach dem Prinzip verfahre ich weiter, wobei ich dann nur die jewiligen Array-Elemente, in denen zu ersetzende Zeichenketten sind, mit neue Zeichen überschreibe
Ist das korrekt? Wenn ja, ist die Idee genial ;)
|
20.08.2007, 19:33:40
|
|
Junior Member
|
|
Registriert seit: Mar 2006
Beiträge: 415
|
|
AW: Referenz auf Teilstring?
Genau das war die Idee.
Allerdings wäre für solch ein Vorhaben ein DEA (deterministischer endlicher Automat) zweifellos performanter. Aber ich habe das Gefühl, dass ich das immer predige.
Man muss dazu sagen, dass das Erstellen sehr aufwendig und langweilig ist, der entstandene Quelltext sieht außerdem nicht sehr elegant aus. Ist aber sauschnell.
Nunja, viel Glück mit Deinen Stringreferenzen. Lass uns doch an Deinem Fortschritt teilhaben, also ruhig mal ab und zu den Zwischenstand der Klasse hier veröffentlichen :)
__________________
Bitte sprich entweder deutsch oder englisch mit mir, aber nicht beides gleichzeitig.
----------
Bitte vor dem Fragen lesen: Wie man Fragen richtig stellt.
|
21.08.2007, 10:08:13
|
Anfänger
|
|
Registriert seit: Aug 2007
Beiträge: 10
|
|
AW: Referenz auf Teilstring?
Nochmal eine Frage, bevor ich damit beginnen werde: Ist mein Vorhaben für die von mir genannte Benutzung überhaupt sinnvoll, oder sollte ich einfach mit str_replace() arbeiten?
Wie genau stellst du dir die Anwendung eines DEAs hier vor? Kannst du die Funktionsweise in diesem Fall kurz erläutern bitte? Ich habe mal Automaten in Prolog programmiert, aber das ist ja etwas ganz anderes. Ich kann mir irgendwie nur schwer vorstellen, wie ich dieses Verfahren in PHP und für meinen Zweck anwenden soll.
Edit: Meinst du evtl. mit dem DEA, dass du nicht erst alle Treffer vom Resttext trennst (separaten Array-Elementen) und dann erst editierst, sondern bei einem Treffer sofort editierst und nach dem nächsten Treffer suchst? Also keine Blockabarbeitung: alle suchen, alle ersetzen, sondern suchen > ersetzen, suchen > ersetzen ...? Wäre das nicht eine rekursives Such-Ersetz-Verfahren?
Geändert von sigurd (21.08.2007 um 11:43:10 Uhr)
|
21.08.2007, 16:27:33
|
|
Junior Member
|
|
Registriert seit: Mar 2006
Beiträge: 415
|
|
AW: Referenz auf Teilstring?
Neinnein, das meine ich ganz und gar nicht.
Im Englischen gibt es für das was ich meine die Bezeichnung "state machine". Im Prinzip ist das nur eine große switch Anweisung die über alle Zeichen iteriert. Die Zustände Deine Automaten würde dann durch eine int-Variable gespeichert.
Wenn Du mit str_replace arbeitest musst Du für jedes Element nochmal ganz neu suchen, was halt dauern könnte. Aber mit dem Automaten liest Du das Eingabeband (also hier der zu untersuchende Text) genau einmal ein.
Beispiel: Sagen wir Du möchtest '{a}' erkennen und durch 'blubb' ersetzen:
PHP-Code:
$state = 0;
$buffer = '';
$return = '':
foreach ($str as $ch)
switch ($state): {
case 0:
$buffer .= $ch;
if ($ch == '{') {
$state = 1;
$buffer = $ch;
} else {
$return .= $buffer;
$buffer = '';
}
break;
case 1:
$buffer .= $ch;
if ($ch == 'a')
$state = 2;
else
$state = 0;
break;
case 2:
$buffer .= $ch;
if ($ch == '}')
$state = 3;
else
$state = 0;
break;
case 3:
$return .= 'blubb';
$buffer = '';
$state = 0;
break;
default:
$state = 0;
break;
}
Ich habs jetzt nicht getestet, könnten also noch n par Schnitzer drin sein. Aber Du siehst was ich in etwa meine. Du siehst außerdem, dass das ziemlich in die Länge geht.
Abschließend bleibt noch zu sagen, dass Du Dir jede menge Arbeit sparen kannst, wenn Du die zu ersetzenden Zeichenketten einfach alle als php Variablen definierst. Also etwa $variable. Dann kannst Du das ganzeinfach auswerten und php setzt Dir die entsprechenden Variablen da rein. Dann musst Du aber halt mit der php Notierung vorlieb nehmen.
Grüße
__________________
Bitte sprich entweder deutsch oder englisch mit mir, aber nicht beides gleichzeitig.
----------
Bitte vor dem Fragen lesen: Wie man Fragen richtig stellt.
|
21.08.2007, 17:42:01
|
|
AW: Referenz auf Teilstring?
Der Sinn von Templates ist nicht vordringlich, PHP von HTML zu trennen, sondern die Applikationslogik von der Präsentation...
Mache dich besser erstmal mit dem "Modell View Controller Design Pattern" bekannt. Das bringt meines Erachtens nach mehr....
Dises ist so das maximum, was ich mir an Templates antue...
PHP-Code:
<?php
error_reporting(E_ALL);
ini_set('display_errors', TRUE); // evtl. hilfreich
function template($string,$array)
{
$pattern = '/{([^}]*)}/ie';
$eval = 'isset($array["$1"])?$array["$1"]:"$0"';
return preg_replace($pattern,$eval,$string);
}
$string = "Ein {Tier} sprang über {Hindernis} </br>";
$var = array();
$var['Tier'] = 'Hund';
$var['Hindernis'] = 'den Graben';
echo template($string,$var) ;
$var['Tier'] = 'Pferd';
$var['Hindernis'] = 'das Gatter';
echo template($string,$var) ;
?>
Aber auch nur weil es sich so gut mit mysql_fetch_array Datenmengen verwenden läßt
|
21.08.2007, 20:14:46
|
|
SELFPHP Guru
|
|
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
|
|
AW: Referenz auf Teilstring?
Zitat:
Zitat von rambi
Dises ist so das maximum, was ich mir an Templates antue...[... viel Script...]
|
Selbst das ist noch zuviel (KTemplate, PHP5.2.x):
PHP-Code:
# irgend was...
$t = new template('./ich_bin_das.tpl');
$t->assign($one_row); # det Geraffel, was MySQL mit einer zweckdienlichen Abfrage liefert
$t->out();
Jut, aber davon, was in 'irgend was' steht, bestreite ich meinen Lebensunterhalt. <g>
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
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.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 08:36:58 Uhr.
|