 |
| 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 |
26.02.2007, 12:59
|
#1
|
|
TP-Junior
Registriert seit: Mar 2005
|
[PHP] Worte vergleichen
Hallo liebe Traum-Projektler,
ich versuche grade einen vocabeltrainer in PHP zu programmieren. Das Problem ist, dass ich bei dem ablgeichen der Vocabeln ein bisschen hängen bleibe.
Also ich habe eine Variable, welche zu dem gesuchten Wort die übersetzte Form aus einer Datenbank ausliest. Z.b wird das Wort "court" gesucht. Aus der Datenbank würde er sich jetzt folgendes holen "(Gerichts-, Königs-)Hof, Gericht".
Zur Zeit wandel ich dieses in einen Array um und verwende als Trennungszeichen das ", ".Dann gleiche ich ab ob es in einem der Arrays eine übereinstimmung mit dem eingegeben Wort gibt. Dieses verfahren funktioniert nur so lange, bis ein Wort mit einer Klammer auftaucht.
Würde ich es weiterhin mit dem spliten versuchen, wären die Antwortmöglichkeiten nur "(Gerichts-", "Königs-)Hof" und "Gericht".
Eigentlich sollten aber die richtigen Antwortmöglichekiten
"Gerichtshof", "Königshof", "Hof" und "Gericht" sein. Evtl. sollte auch noch eine eingabe mit den Klammern für richtig identifiziert werden.
Überlegt hatte ich mir, die Klammern zu löschen und die "-" mit "hof" zu ersetzen. Dies funktioniert aber auch nicht so ganz, weil die Variable ja einen anderen Wert beinhalten kann, z.B. "(be-, zu-)decken, Decke(l), Deckung".
Habt ihr vielleicht eine Idee, wie ich dieses Problem lösen kann?
Ich hoffe ich habe es verständlich erklärt.
markus
|
|
|
26.02.2007, 14:57
|
#2
|
|
TP-Senior
Registriert seit: Sep 2003
|
hallo,
also das mit dem ersetzen halte ich schonmal für nen guten anfang.
du holst die übersetzung ja aus ner datenbank... und an deiner stelle würd ich einfach mit replace alle klammern in zum beispiel: XxX u. Xx2X (hauptsache irgendeine zeichenfolge, die sicherlich niemals reell vorkommt) replacen und bevor du die übersetzung dann als html "ausspucken"  lässt, lässt alles wieder von XxX oder Xx2X nach ( oder ) replacen...
MfG VoltFreeze
__________________
Vertraue niemals einem PC, den du nicht aus dem Fenster schmeißen kannst.
|
|
|
27.02.2007, 09:58
|
#3
|
|
TP-Junior
Registriert seit: Mar 2005
|
danke für deine Antwort, doch leider versteh ich diese nicht ganz.
Was würde mir das bringen, wenn ich die Klammern in XxX und Xx2X replace? Dann könnte ich doch trozdem nicht die Worte in der Klammer mit dem Wort nach der Klammer verbinden, um so neue Schlüsselwörter zu erzeugen? Oder hab ich da jetzt was falsch verstanden?
gruß
markus
|
|
|
27.02.2007, 10:03
|
#4
|
|
TP-Senior
Registriert seit: Jul 2006
Ort: Köln
|
PHP-Code:
// INIT
$var='(Gerichts-, Königs-)Hof, Gericht';
// Ist eine Klammer enthalten? Wenn ja, dann so, ansonten ausgabe der var
$banana_split=split('\(',$var);
if (is_array($banana_split))
{
// Debug only
// echo '<pre>'.print_r($banana_split).'</pre>';
// Wieviele Wörter in der Klammer.
$klammer=split('\)',$banana_split[1]);
$klammerwörter=split(',',$klammer[0]);
// Debug only
// echo '<pre>'.print_r($klammerwörter).'</pre>';
for ($i=0;$i<sizeof($klammerwörter);$i++)
{
$wort[]=substr($klammerwörter[$i],0,stripos($banana_split[1],'-')-1);
// echo $wort[$i]; // Debug
}
// Nach der Klammer ist vor der nächstesn Klammer ^^
$blubb=split('\)',$var);
$nichtklammer=split(',',$blubb[1]);
// Erstes Wort ist natürlich [0]
// echo '<pre>'.print_r($nichtklammer).'</pre>';
for ($i=0;$i<sizeof($nichtklammer);$i++)
{
if ($i==0) $anhang=$nichtklammer[$i];
else
$weitere_vokabeln[]=$nichtklammer[$i];
}
for ($i=0;$i<sizeof($wort);$i++)
{
$vokabeln[]=$wort[$i].$anhang;
}
for ($i=0;$i<sizeof($weitere_vokabeln);$i++)
{
$vokabeln[]=$weitere_vokabeln[$i];
}
echo '<pre>';
print_r($vokabeln);
echo '</pre>';
}
Code ist getestet mit Dienem beispiel und funzt. Sorg dafür, daß die Datenbank immer Deine Regeln einhält, und es geht gut  .
Okay, bitte nicht lästern - ich bin nicht so der PHP Haxxor, es gibt bestimmt auhc optimierte PREGS und was weiss ich nicht noch alles, aber das Problem hat mich gereizt, deswegen hab ich es mir mal angeschaut. Langweilig ist mir mit SIcherheit nicht, aber naja, so sieht´s aus.
Falls Du es als Grundlage für Deine eigene Funktion verwenden kannst, umso besser, freu7t mich, wenns geholfen hat.
---Edit: Das war das letztemal, daß ich mir den Beitrag Nicht in ganzer Länge durchlese, bevor ich anfange loszuhacken.  - für den Decke(l) mußt DU natürlich eine Ausnahme machen. Etwa in der Form, daß nur die erste Klammerseparierung betrachtet wird. Dann sollte es aber gehen, und z.B. Decke(l) so ausgegeben werden.
__________________
Ich habe keine Signatur. Dieser Satz kein Verb.
Geändert von Angelmaker (01.03.2007 um 14:29 Uhr).
|
|
|
27.02.2007, 10:26
|
#5
|
|
TP-Junior
Registriert seit: Mar 2005
|
Vielen vielen dank für deine Mühen! Der Code ist echt Klasse, werde ihn mal erweitern, so das der Decke(l) auch passt  vielen Danke noch einmal
marKus
|
|
|
27.02.2007, 11:11
|
#6
|
|
TP-Senior
Registriert seit: Jul 2006
Ort: Köln
|
Gern geschehen.
edit: Mir fällt grad auf - für mehrere durchläufe mußt DU halt auch die Arrays, wie Wort[], etc. wieder resetten. Ach, im nachhinein fällt mir noch so viel auf... 
__________________
Ich habe keine Signatur. Dieser Satz kein Verb.
Geändert von Angelmaker (28.02.2007 um 11:43 Uhr).
|
|
|
|
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 17:42 Uhr.
|
 |