Querverweise

Alles, was PHP betrifft, kann hier besprochen werden.

Querverweise

Postby Demetry » 01. January 2006 19:42

Hallo PHP & MySql Gurus!

In einem Nachschlagewerk (wie z. B. Wikipedia) gibts ja häufig die Möglichkeit via einem Querverweis zu näher oder andere Details zu gelangen...

Wie kann ich das mit PHP und MYSQL lösen?
Die lexikon.php ist die Ausgabedatei in der z. B. der Begriff und darunter die dazugehörige Beschreibung. Und in dieser Beschreibung soll dann heraus evtl. Querverweise entstehen.
Diese Begriffe mit den Erklärungen stehen in einer MYSQL-Datenbank (inkl. IDs).
Wäre es auch vielleicht möglich, da ja auch das Sammelsorium an Begriffen mit Beschreibungen nach einer Zeit größer wird, dass die Querverweise PHP & MYSQL überlassen werden kann?

Ich hoffe, ihr könnt verstehen, was ich damit meine.
Demetry
 
Posts: 79
Joined: 19. July 2005 22:39
Location: Germany
Operating System: Windows 7 / 8.1

Postby jakimo72 » 02. January 2006 02:50

Vor der Anzeige von Text, diesen Text auf Stichwörter durchsuchen,
und diese automatisch in Link austauschen.
Für deutsche Texte kann man einfach den Text wortweise durchscannen
und jedes Wort in einem assoziativem Array nachschauen. (Für engliche Texte ist es etwas komplizierter, da dort häufig ein Stichwort aus mehreren einzelnen Wörtern besteht.)

Grobe Vorgehensweise:
1. Alle Stichwörter in ein assoziatives Array einlesen, damit
das Script nur einmal auf die Datenbank zugreifen muss.
2. Den Text nach Wörtern parsen, und in dem Array nachsehen
3. Bei Übereinstimmung, das Wort durch ein Link austauschen.


Ungeprüfter Code für die Erkennung:
Code: Select all

//Es existierte ein assoziatives Array mit Stichwörtern und den
//dazugehörigen Links...

//Call-Back-Funktion für preg_replace_callback
function findandreplace($treffer)
{
global $array; 
if(isset($array[$treffer[0]]))
  return "<a href=\"$array[$treffer[0]]\">".$treffer[0]."</a>";
else
  return $treffer[0];
}

//Suchen nach Wörtern mit 3 oder mehr Buchstaben oder Bindestrichen
echo preg_replace_callback(
           "|[-\w]{3,}|",
           "findandreplace",
           $text);
User avatar
jakimo72
 
Posts: 151
Joined: 07. February 2005 13:25
Location: Hamburg-Barmbek

Postby Demetry » 02. January 2006 13:11

jakimo72 wrote:Vor der Anzeige von Text, diesen Text auf Stichwörter durchsuchen,
und diese automatisch in Link austauschen.
Für deutsche Texte kann man einfach den Text wortweise durchscannen
und jedes Wort in einem assoziativem Array nachschauen. (Für engliche Texte ist es etwas komplizierter, da dort häufig ein Stichwort aus mehreren einzelnen Wörtern besteht.)

Grobe Vorgehensweise:
1. Alle Stichwörter in ein assoziatives Array einlesen, damit
das Script nur einmal auf die Datenbank zugreifen muss.
2. Den Text nach Wörtern parsen, und in dem Array nachsehen
3. Bei Übereinstimmung, das Wort durch ein Link austauschen.


Ungeprüfter Code für die Erkennung:
Code: Select all

//Es existierte ein assoziatives Array mit Stichwörtern und den
//dazugehörigen Links...

//Call-Back-Funktion für preg_replace_callback
function findandreplace($treffer)
{
global $array; 
if(isset($array[$treffer[0]]))
  return "<a href="$array[$treffer[0]]">".$treffer[0]."</a>";
else
  return $treffer[0];
}

//Suchen nach Wörtern mit 3 oder mehr Buchstaben oder Bindestrichen
echo preg_replace_callback(
           "|[-\w]{3,}|",
           "findandreplace",
           $text);


Erzeugt bei mir einen Fehler:
Parse error: syntax error, unexpected '[', expecting ']' in ....php on line 35

Zeile 34/35:
if(isset($array[$treffer[0]]))
return "<a href="$array[$treffer[0]]">".$treffer[0]."</a>";
Demetry
 
Posts: 79
Joined: 19. July 2005 22:39
Location: Germany
Operating System: Windows 7 / 8.1

Postby jakimo72 » 02. January 2006 19:02

Entschuldige bitte, dass ich ein ungetesteten Code eingestellt
habe. Er sollte nur als Anhaltspunkte für eigene Entwicklung dienen...
Aber ich habe die fehlenden Anführungsstriche einefügt...
Jetzt funktioniert es.
Code: Select all
<?php

$text = 'Es war einmal ein Hund, der wurde von einer Katze geärgert. '.
        'Daraufhin kaufte der Hund eine Maus, und die Katze hat fortan die Maus geärgert.';


//Es existierte ein assoziatives Array mit Stichwörtern und den
//dazugehörigen Links...
$array = array('Hund'=>'http://de.wikipedia.org/wiki/Hund',
               'Katze'=>'http://de.wikipedia.org/wiki/Katze',
               'Maus'=>'http://de.wikipedia.org/wiki/Maus');

//Call-Back-Funktion für preg_replace_callback
function findandreplace($treffer)
{
global $array;
if(isset($array[$treffer[0]]))
  return "<a href=\"".$array[$treffer[0]]."\">".$treffer[0]."</a>";
else
  return $treffer[0];
}

//Suchen nach Wörtern mit 3 oder mehr Buchstaben oder Bindestrichen
echo preg_replace_callback(
           "|[-\w]{3,}|",
           "findandreplace",
           $text);               
?>
User avatar
jakimo72
 
Posts: 151
Joined: 07. February 2005 13:25
Location: Hamburg-Barmbek

Postby jakimo72 » 02. January 2006 19:12

P.S.:
Du kannst in den Code noch
Code: Select all
setlocale(LC_ALL,'de_DE');

einfügen, oder den regulären Ausdruck
um Umlaute und Eszet erweitern.[/code]
User avatar
jakimo72
 
Posts: 151
Joined: 07. February 2005 13:25
Location: Hamburg-Barmbek

Postby Demetry » 02. January 2006 19:14

Sorry, war nicht negativ gemeint.
Ist mir im nachhinein auch aufgefallen und ich wollte eigentlich nur einen Ansatz für das Problem haben..
Danke für die zweite näherbringende Lösung. Sollte nur als Ansatz, weil ich überhaupt keine Ideen hatte, wie ich das Problem (Frage) lösen hätte können...
Demetry
 
Posts: 79
Joined: 19. July 2005 22:39
Location: Germany
Operating System: Windows 7 / 8.1


Return to PHP

Who is online

Users browsing this forum: No registered users and 55 guests