Marc: Suchen und ersetzen...

Hallo liebe Forumsgemeinde,

ich habe ein Problem das ich nicht alleine lösen kann. Deshalb wende ich mich an euch ;-)

Der follgende Quelltextausschnitt ist Teil eines PHP-Scripts dass eine Eingabe (über ein html Formular) mit Textsätzen in einer Textdatei vergleicht, und falls es eine übereinstimmung findet, die zugehörige Antwort ausgibt.

function answer()
{
global $cfg, $ask;
$ask = (empty($ask)) ? "<empty>" : $ask;
$kick = array("?","\n");
$ask = str_replace($kick,"",$ask);
$f = file($cfg["answersfile"]);
for ($i=0; $i<=count($f); $i++)
{
$an = split(";", $f[$i]);
$a = $an[0];
if (strstr($a,trim($ask)))
{
if ($wasone)
{
return("Bitte stelle deine Frage genauer!");
}
array_shift($an);
array_pop($an);
$ai = rand(0, count($an)-1);
$wasone = true;
$retval = $an[$ai];
}
}
$retval = (empty($retval)) ? "Ich verstehe dich nicht, bitte versuche es nochmal. Mit jeder Frage lerne ich dazu." : $retval;
return $retval;
}

Die Antwortdatei sieht wie folgt aus:

Frage zum überprüfen;Antwort die ausgegeben wird;
Eingabe;Ausgabe;
1;eins;
100;einhundert
...

Wenn ich jetzt in das formular "100" eingebe wird wie es auch sein sollte "einhundert" ausgegeben. Wenn ich "1" eingebe bekomme ich die Ausgabe "Bitte stelle deine Frage genauer". Mir ist denke ich klar wieso das so ist, aber ich weiß nicht wie ich das Problem umgehen kann. Wisst ihr eine relativ einfache möglichkeit.

Nur noch zum Schluss, wie Ihr euch vermutlich denken könnt bin ich nicht der PHP-Profi, der ich gerne sein würde, ansonaten müsste ich euch nicht fragen, also nicht böse sein, wenn alles ein bisschen kompliziert formuliert ist. Ich hoffe Ihr versteht was ich meine.

mfg Marc

  1. Mir ist denke ich klar wieso das so ist, aber ich weiß nicht wie ich das Problem umgehen kann.

    ->> Was denkst DU denn WARUM das so ist ???
    FIREBRAIN

    1. Hallo FIREBRAIN,

      Mir ist denke ich klar wieso das so ist, aber ich weiß nicht wie ich das Problem umgehen kann.

      ->> Was denkst DU denn WARUM das so ist ???

      Ich denke das liegt daran, dass er wenn er nach der 1 Sucht mehrere Möglichkeiten findet.

      Aber man könnte es doch zum Beispiel so machen, dass er die Frage/antwort-Datei nur solange durchsucht, bis er eine Antwort gefunden hat und dann die Suche abbricht. Man müsste dann nur darauf achten, dass die 1 vor der 100 steht.

      mfg Marc

      1. Hallo Marc,

        Dein Script nachzuvollziehen ist mir im Moment zu hoch, aber wenn es an der häufiger vorkommenden "1" liegt, dann doch wohl, weil es sich sowohl bei "1" als auch bei "100" um Strings handelt, oder? Also entweder suchst Du nach dem ganzen Ausdruck zwischen zwei Trennern (bei Dir zwischen \n und ';') oder Du wandelst die Ziffernfolgen erstmal in Zahlen um und vergleichst Zahlenwerte - die Zahl 100 ist der Zahl 1 nicht ähnlich.

        Gruß, Andreas

        1. yep. Andreas hat recht.
          noch einfacher (und wahrscheinlich schneller) wäre die geschichte wenn du ne datenbank verwendest, v.a. wenn du viele eintraege hast.

          greez

          firebrain