SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



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



:: Buchempfehlung ::

TYPO3 Kochbuch

TYPO3 Kochbuch zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Grundlagen
Hilfe Community Kalender Heutige Beiträge Suchen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 17.08.2007, 11:53:16
sigurd sigurd ist offline
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)
Mit Zitat antworten
  #2  
Alt 18.08.2007, 21:51:12
Raketenmann Raketenmann ist offline
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)
Mit Zitat antworten
  #3  
Alt 20.08.2007, 09:53:40
sigurd sigurd ist offline
Anfänger
 
Registriert seit: Aug 2007
Beiträge: 10
AW: Referenz auf Teilstring?

Hm, ich glaub, du hast Recht.
Mit Zitat antworten
  #4  
Alt 20.08.2007, 10:12:06
Benutzerbild von z0iD
z0iD z0iD ist offline
Junior Member
 
Registriert seit: Mar 2006
Beiträge: 415
z0iD eine Nachricht über ICQ schicken
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.
Mit Zitat antworten
  #5  
Alt 20.08.2007, 14:58:31
sigurd sigurd ist offline
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 ;)
Mit Zitat antworten
  #6  
Alt 20.08.2007, 19:33:40
Benutzerbild von z0iD
z0iD z0iD ist offline
Junior Member
 
Registriert seit: Mar 2006
Beiträge: 415
z0iD eine Nachricht über ICQ schicken
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.
Mit Zitat antworten
  #7  
Alt 21.08.2007, 10:08:13
sigurd sigurd ist offline
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)
Mit Zitat antworten
  #8  
Alt 21.08.2007, 16:27:33
Benutzerbild von z0iD
z0iD z0iD ist offline
Junior Member
 
Registriert seit: Mar 2006
Beiträge: 415
z0iD eine Nachricht über ICQ schicken
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.
Mit Zitat antworten
  #9  
Alt 21.08.2007, 17:42:01
rambi
Guest
 
Beiträge: n/a
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
Mit Zitat antworten
  #10  
Alt 21.08.2007, 20:14:46
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 75
Beiträge: 4.001
AW: Referenz auf Teilstring?

Zitat:
Zitat von rambi Beitrag anzeigen
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>
Mit Zitat antworten
Antwort


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.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Komplette HTML Referenz fizzle HTML, CSS und JavaScript Help! 4 16.06.2004 06:25:06
Teilstring in Abfrage kuechenschabe MySQLi/PDO/(MySQL) 5 01.06.2004 16:31:52
Delphi Referenz? gray Off Topic Area 0 09.09.2003 19:28:32
Teilstring finden und in Variable speichern swishy PHP für Fortgeschrittene und Experten 3 19.01.2003 20:08:46
Teilstring kopieren :) das ich (: PHP für Fortgeschrittene und Experten 4 18.09.2002 17:19:43


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:36:58 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt