Gabi S.: Array zischen Funktionsaufrufen erhalten

Hallo Gemeinde,

ich stehe vor folgendem Problem: Ich habe drei Funktionen in einem PHP-Script bei der bestimmte Wörter aus einem Text durch Links ersetzt werden. Wörter sollen aber nur einmal im Text durch einen Link ersetzt werden. Deshalb möchte ich jedes Wort in einem Array speichern und immer abfragen, ob das Wort schon einmal aufgetreten ist, oder nicht. Wenn nicht wird das Wort einem Array hinzugefügt, sonst halt nicht. Irgendwie scheint das mit dem Array aber nicht zu funktionieren; entweder bleibt das Array nicht erhalten, oder ich habe irgendwo einen Denkfehler (Problem mit der weiblichen Logik ;-)).

Hier mal die Funktionen:

function ersetze_text (...){

$text = preg_replace_callback('/(<.*=.*>)|  (\w+)/','keyword_callback', $text);

return $text;
}

function keyword_callback ($s)
{
  if (check_repeat($s[2])) return $s[2];

$article = keyword_best_article($s[2]);

if ($article) {
    return sprintf('bla,bla...', $article->id, $article->title, $s[2]);
  }
  else {
    return $s[2];
  }
}

function check_repeat($wort)
{
  global $wortliste;

if (array_search($wort,$wortliste)) return 1;

array_push($wortliste,$wort);
 return 0;
}

Was mache ich falsch? Kann mir jemand helfen?

Güße
Gabi

  1. Hi,

    function ersetze_text (...){

    $text = preg_replace_callback('/(<.*=.*>)|  (\w+)/','keyword_callback', $text);

    return $text;
    }

    function keyword_callback ($s)
    {
      if (check_repeat($s[2])) return $s[2];

    $article = keyword_best_article($s[2]);

    if ($article) {
        return sprintf('bla,bla...', $article->id, $article->title, $s[2]);
      }
      else {
        return $s[2];
      }
    }

    IMHO sollte preg_replace_callback sowieso jedes wort im text nur einmal ersetzen.
    Was passeirt denn, wenn Du es nicht überprüfst?

    ciao
    romy

    --
    DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
    sh:( fo:| ch:? rl:( br:& va:| zu:) ss:| ls:[
    Die Erklärung zum Selfcode findest du hier: http://emmanuel.dammerer.at/selfcode.html
    Einen Decoder für den Selfcode findest du hier: http://peter.in-berlin.de/projekte/selfcode
    1. IMHO sollte preg_replace_callback sowieso jedes wort im text nur einmal ersetzen.
      Was passeirt denn, wenn Du es nicht überprüfst?

      Dann wird jedes Wort wiederholt ersetzt. Deswegen habe ich ja extra diese Abfrage noch einbauen wollen, um die Datenbank und das Auge zu entlasten.

      Gruß,
      Gabi

      1. Huhu Gabi

        [... ]und das Auge zu entlasten.

        Das ist eine gute Idee, und wenn Deine Augen gerade mal schön entlastet sind wirf doch noch mal einen Blick in die Dokumentation.

        <quote>
        mixed preg_replace_callback ( mixed pattern, callback callback, mixed subject [, int limit])
        </quote>

        mmmh, da scheint es einen optionalen Parameter limit zu geben, was der wohl für eine Aufgabe hat ...

        http://de.php.net/manual/de/function.preg-replace-callback.php

        http://de.php.net/manual/de/function.preg-replace.php

        Viele Grüße

        lulu

        --
        bythewaythewebsuxgoofflineandenjoytheday