Schlüsselwörter in Arrays erkennen?
Ingo
- php
Hi, ich habe ein Problem mit Operatoren...
Ich versuche mit einer Reihe von if-elseif-else Anweisungen eine Art reaktiver Intelligenz umzusetzen (Eliza).
Dummerweise ignoriert mein Script die Schlüsselworte wenn sie nicht an Erster Stelle in dem Inputfeld stehen...
Gebe ich "Test ob es klappt ein" kommt entsprechend die Antwort $a003.
Gebe ich nun aber "Mal sehen ob es klappt, Test" ein, dann wird immer Antwort $a000 ausgespuckt. Welchen Operator muss ich einsetzen damit das Schlüsselwort akzeptiert wird, unabhängig von der Position im Satz?
Grüße
Ingo
<?
$_001 = ("Test");
$_001 = ("Test2");
$_001 = ("Test3");
$a000 = "Testantwort 1";
$a001 = "testantwort 2";
$a002 = "Testantwort 3";
$a003 = "Testantwort 4";
echo "<form method=POST>";
echo "<textarea rows=10 name=antwort cols=50 class=t1>";
if($frage = Test) { echo "$a003 "; }
elseif ($frage = Test2) { echo "$a001"; }
elseif ($frage = Test3) { echo "$a002"; }
else { echo "$a000"; }
echo "</textarea><br>";
echo "<input type=text name=frage size=50>";
echo "<input type=submit value=ask name=fragen>";
echo "</form>";
?>
</body>
</html>
hi,
Dummerweise ignoriert mein Script die Schlüsselworte wenn sie nicht an Erster Stelle in dem Inputfeld stehen...
nein, das tut es deshalb, weil du hier
if($frage = Test) { echo "$a003 "; }
elseif ($frage = Test2) { echo "$a001"; }
elseif ($frage = Test3) { echo "$a002"; }
überhaupt keine vergleiche machst, sondern zuweisungen.
und von denen evaluiert idR. schon die erste zu true, so dass die abfragerei gar nicht mehr weiter kommt. (unter der annahme, dass eine konstante namens Test existiere, deren wert nicht false ist, oder PHP hier mal wieder gütigerweise deinen fehler übergeht und für Test "Test" annimmt. klartext: wenn du das literal mit dem inhalt Test meinst, dann notiere es auch entsprechend: "Test" oder 'Test').
der vergleichsoperator ist ==, nicht ein einfaches gleich.
Welchen Operator muss ich einsetzen damit das Schlüsselwort akzeptiert wird, unabhängig von der Position im Satz?
schau dir die stringfuntionen an, strpos() o.ä. sollten weiterhelfen können.
Ich versuche mit einer Reihe von if-elseif-else Anweisungen eine Art reaktiver Intelligenz umzusetzen (Eliza).
bei dem kenntnisstand, den die hier im beispiel vorgebrachten (anfänger-)fehler offenbaren, schon eine ziemlich "große" aufgabe ...
gruß,
wahsaga
nein, das tut es deshalb, weil du hier
if($frage = Test) { echo "$a003 "; }
elseif ($frage = Test2) { echo "$a001"; }
elseif ($frage = Test3) { echo "$a002"; }überhaupt keine vergleiche machst, sondern zuweisungen.
Ich habe es mit kleiner, größer, kleiner gleich, größer gleich, etc.etc.etc. versucht - also so ziemlich alle Vergleichsoperatoren durchgenommen.
Ergebnis; Entweder es wird immer else ausgegeben, oder eben verglichen ob der Wert Höher oder niedriger ist...
der vergleichsoperator ist ==, nicht ein einfaches gleich.
Weis ich, hatte ich auch schon...
schau dir die stringfuntionen
Danke, werde ich machen...
bei dem kenntnisstand, den die hier im beispiel vorgebrachten (anfänger-)fehler...
C'est la vie - logisch nachvollziehen kann ich es immerhin, nur die technische Umsetzung...
Wegen des Threads ein Stückchen weiter oben...
aus welchem Grund bist Du nicht in Deinem Posting von gestern >geblieben? (Antwort bitte dort. ;-)
Hier?
Ok...
A.) Das Problem welches ich dort, also hier, gepostet hatte, habe ich mittlerweile gelöst - Erkennen eines bestimmten Schlüsselwortes und Zuweisung zu einer bestimmten Variablen...
B.) Hier wurde auf die Fehler die im hier geposteten Code vorhanden waren, eingegangen - an sich nichts schlimmes und begrüßenswert, doch ging es mir nicht um die Fehler als solche, sondern um die Möglichkeiten einen bestimmten Teil eines Strings zu erkennen - davon ab erschien mir stellenweise der Tonfall/Schreibstil ein wenig, nun, arrogant.
Weil ich das Problem bei einem bestimmten Stichwort mittlerweile gelöst habe, dachte ich das dieses Thema hier eigentlich hinfällig wäre - zumal weniger auf die Frage, als vielmehr auf den Code eingegangen wurde.
Interessante Wiederholung das der Code Fehler enthielt - war mir klar, mir ging es auch nur um Möglichkeiten bezgl. des Strings...
Hier nun der überarbeitete Code und eine Neue Frage.
Vorweg - ich weis das der boolsche Operator nicht das gewünschte Ergebnis liefert, war auch eher ein Ansatz...
Meine neue Frage - ist es auch möglich zwei oder mehr Schlüsselwörter innerhalb des Strings zu erkennen, unabhängig von ihrer Position im Selbigen??
Danke schön
<?
$w01 = "Textformatierung";
$w02 = "texte";
$w03 = "links";
$w04 = "link";
$w05 = "fettschrift";
$w06 = "unterstrich";
$w07 = "formatiere";
$a00 = "Bitte?";
$a01 = "Die Textformatierung findet durch einen speziellen Code statt.";
$a02 = "Texte können über die Newssektion bearbeitet werden";
$a03 = "Links oder Hyperlinks lassen sich derzeit nicht einbinden";
$a04 = "Links oder Hyperlinks lassen sich derzeit nicht einbinden";
$a05 = "Du kannst Text als Fett darstellen lassen wenn du den Code #b verwendest.";
$a06 = "Einen Unterstrichenen Text erzeugst du indem du #u Dein Text u# schreibst.";
$t1 = "Verzeihung, das Wort ist mir unbekannt - kannst du deine Frage genauer stellen?";
echo "<form name=f>";
echo "<textarea rows=10 name=antwort cols=50 class=t1>";
if($senden) {
$k1 = "$frage";
$k1 = strtolower($k1);
# Testweise mit versch. Operatoren versucht...
if (strpos($k1,$w02 && $k1,$w07)) { echo $a01; }
elseif (strpos($k1,$w02)) { echo $a02; }
elseif (strpos($k1,$w03)) { echo $a03; }
elseif (strpos($k1,$w04)) { echo $a04; }
elseif (strpos($k1,$w05)) { echo $a05; }
elseif (strpos($k1,$w06)) { echo $a06; }
elseif ($k1 == $n1) { echo $a01; }
elseif ($k1 == $f1) { echo $a01; }
else { echo $a00;}
}
echo "</textarea><br>";
echo "<input type=text name=frage size=47>";
echo "<input type=submit value=ask name=senden>";
echo "</form>";
?>
Hi,
aus welchem Grund bist Du nicht in Deinem Posting von gestern >geblieben? (Antwort bitte dort. ;-)
Hier?
Ok...A.) [...]
Ähm, ich befürchte, das war eine rethorische Frage ;-)
Meine neue Frage - ist es auch möglich zwei oder mehr Schlüsselwörter innerhalb des Strings zu erkennen, unabhängig von ihrer Position im Selbigen??
Ja, durchaus.
http://de3.php.net/manual/en/ref.regex.php
so short
Christoph Zurnieden
der vergleichsoperator ist ==, nicht ein einfaches gleich.
Und wenn man clever ist dann schreibt man es auch so:
if('Test'== $frage) { echo "$a003 "; }
dann würde bei einem vergessenem "=" auch gleich nen Error kommen.
echo $begrüßung;
Hi, ich habe ein Problem mit Operatoren...
Ich versuche mit einer Reihe von if-elseif-else Anweisungen eine Art reaktiver Intelligenz umzusetzen (Eliza).
Dummerweise ignoriert mein Script die Schlüsselworte wenn sie nicht an Erster Stelle in dem Inputfeld stehen...
Gebe ich "Test ob es klappt ein" kommt entsprechend die Antwort $a003.
Gebe ich nun aber "Mal sehen ob es klappt, Test" ein, dann wird immer Antwort $a000 ausgespuckt. Welchen Operator muss ich einsetzen damit das Schlüsselwort akzeptiert wird, unabhängig von der Position im Satz?Grüße
Ingo<?
Dein Script wird nicht überall laufen. Verwende doch besser nicht die short_open_tags sondern die Langform <?php
Stichworte
$_001 = ("Test");
$_001 = ("Test2");
$_001 = ("Test3");
Hier weist du dreimal nacheinander der gleichen Variable verschiedene Werte zu. Außerdem sind die Klammern hier überflüssig. Was hattest du eigentlich vor?
if($frage = Test) { echo "$a003 "; }
Das ist kein Vergleich sondern eine Zuweisung. Weiterhin wird die Konstante Test sicherlich nicht definiert sein. Wenn Test ein String sein soll, dann schließe ihn in '' oder "" ein. Den Bedeutungsunterschied zwischen "" und '' findest du im Handbuch-Kapitel zu Strings
Das Ergebnis der Zuweisung ist gleich dem Wert der Zuweisung. Da Test von PHP automatisch in einen String konvertiert wird und der boolsche Wert dieses Strings true ist ... den Rest kannst du dir sicherlich denken :-)
Bitte schalte das error_reporting zum Entwickeln auf E_ALL, dann wirst du zwar den Zuweisung-statt-Vergleich-Fehler nicht finden, aber die Verwendung der nicht definierten Konstante wird dann bemängelt. Und noch ein paar mehr Anfänger- und Tippfehler.
Zum Finden von Teilstrings in Strings gibt es verschiedene String-Funktionen wie z.B. strpos()
echo "$verabschiedung $name";
Hallo Ingo,
<?
Den folgenden Bereich verstehe ich nicht. Du überschreibst jedesmal die Variable $_001 mit einem neuen Wert. Sie nimmt schlußendlich Test3 auf, wenn du die Klammern entfernst - oder soll das Pseudocode für ein Array sein?
Stichworte
$_001 = ("Test");
$_001 = ("Test2");
$_001 = ("Test3");Antworten
$a000 = "Testantwort 1";
$a001 = "testantwort 2";
$a002 = "Testantwort 3";
$a003 = "Testantwort 4";echo "<form method=POST>";
echo "<textarea rows=10 name=antwort cols=50 class=t1>";
Hier sind auch mehrere Fehler. Heißen muss es:
if($frage == 'Test'); bei den elseif und else entsprechend anzugleichen...
if($frage = Test) { echo "$a003 "; }
elseif ($frage = Test2) { echo "$a001"; }
elseif ($frage = Test3) { echo "$a002"; }
else { echo "$a000"; }echo "</textarea><br>";
echo "<input type=text name=frage size=50>";
echo "<input type=submit value=ask name=fragen>";
echo "</form>";
um jetzt aber mal auf deine Frage einzugehen. Du kannst sicherlich mit preg_match() auf deine Schlüsselwörter im Text eingehen oder es mit strpos() probieren (hier dann aber mit !strpos und entsprechend langem if else oder Switch)...
Zum Lernen und für erste Versuche sicherlich ganz schön, aber eher ein Thema der Linguisten, wenn ich mich nicht irre...
Schönen Gruß aus München
die knappschaft
Hello,
Stichworte
$_001 = ("Test");
$_001 = ("Test2");
$_001 = ("Test3");
meintest Du viellicht:
$_001 = array();
$_001[] = "Test";
$_001[] = "Test2";
$_001[] = "Test3";
?
Dann würde nämlich ein Array mit
$_001[0] == "Test"
$_001[1] == "Test2"
$_001[2] == "Test3"
entstehen.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom