ThE_-_BliZZarD
Grünschnabel
Aktuelle Version: 0.69 RC3
Erklärung zur Eigenarbeit:
Ich bestätige hiermit, dass alle im folgenden Quellcode vorgestellten Funktionen, außer den PHP-eigenen, von mir entworfen und implementiert wurden und ich keinerlei geistiges Eigentum Dritter verwendet habe.
ToDo:
ChangeLog:
Mein Lösungsansatz besteht aus einer einfachen Anhäufung von Funktionen, die ich zuerst kurz vorstellen und erläutern werde, im Anhang findet sich der Sourcecode.
Dokumentation:
Verwendung/Aufruf und Suche:
Sourcecode:
Erklärung zur Eigenarbeit:
Ich bestätige hiermit, dass alle im folgenden Quellcode vorgestellten Funktionen, außer den PHP-eigenen, von mir entworfen und implementiert wurden und ich keinerlei geistiges Eigentum Dritter verwendet habe.
ToDo:
- Vielleicht in eine Klasse einbauen.. aber.. wozu?
ChangeLog:
- 0.69 RC3 Änderungen:
- Dokumentation hinzugefügt (im Folgenden Text)
- Beispiel hinzugefügt
- BugFix: Highlighten funktioniert nun korrekt
- 0.68 RC2 Änderungen:
- Markierung eingefügt
- 0.66 RC1 Erste funktionsfähige Version
Mein Lösungsansatz besteht aus einer einfachen Anhäufung von Funktionen, die ich zuerst kurz vorstellen und erläutern werde, im Anhang findet sich der Sourcecode.
Dokumentation:
- Funktionsübersicht:
PHP:
function UnscharfeSuche($searchPattern, $searchArray)
function PatternMatchesString($searchPattern, $searchIn)
function StringToArray($string)
function DeleteUnmentionedChars($string, $knownChars)
function IsCharInArray($char, $knownChars)
function FormatSearchResult($result, $searchPattern, $useHTML = TRUE, $highlightHits = TRUE, $highlightPre = "<", $highlightPost = ">")
function HighlightHits($result, $searchPattern, $highlightPre = "<", $highlightPost = ">")
- Funktionserläuterungen:
Hinweis: Als Hauptfunktionen gelten die Funktionen, welche vom übergeordneten Script direkt aufgerufen werden- Funktion UnscharfeSuche (Hauptfunktion)
- Parameter:
$searchPattern - Die Suchanfrage, z.B. "JFK"
$searchArray - Ein Array mit den zu durchsuchenden Elementen, z.B. die Ausgabe von file() - Rückgabe:
array - im Format:
$results[' count '] - Anzahl der Ergebnisse
$results[' elements '] - Enthält die passenden Ergebnisse - Erklärung:
Diese Funktion ist die Hauptfunktion. Sie wird mit dem Suchmuster und den zu durchsuchenden Daten aufgreufen, zurück gibt es ein Array mit der Anzahl der Ergebnisse und den String aus dem $searchArray, welche auf das Suchmuster passen
- Parameter:
- Funktion PatternMatchesString
- Parameter:
$searchPattern - Das Suchmuster in string-Form
$searchIn - Der String der gegen das Muster gematched werden soll - Rückgabe:
boolean - Ein boolescher Wert, ob der String mit dem Suchmuster matched. - Erklärung:
Ermittelt, ob das Suchmuster $searchPattern auf den gelieferten String $searchIn passt, liefert im Erfolgsfall TRUE, sonst FALSE zurück
- Parameter:
- Funktion StringToArray
- Parameter:
$string - Der String der in ein Array umgewandelt werden soll - Rückgabe:
array - Ein Array mit Länge-des-Strings Elementen, bestehend aus den einzelnen Zeichen des Quellstrings $string - Erklärung:
Konvertiert einen String in ein ein-Zeichen Array.
- Parameter:
- Funktion DeleteUnmentionedChars
- Parameter:
$string - Der String der auf die wichtigen Zeichen reduziert werden soll
$knownChars - Suchmuster, d.h. die bekannten und erwünschten Zeichen - Rückgabe:
string - Fertig bearbeiteter String - Erklärung:
Entfernt die für den Suchvorgang unrelevanten Zeichen aus dem String
- Parameter:
- Funktion IsCharInArray
- Parameter:
$char - Zu prüfendes Zeichen
$knownChars - Suchmuster in Arrayform - Rückgabe:
boolean - Wenn Zeichen enthalten TRUE, sonst FALSE - Erklärung:
Durchsucht das Suchmuster nach dem gegebenen Zeichen $char
- Parameter:
- Funktion FormatSearchResult (Hauptfunktion)
- Parameter:
$result - Der Rückgabewert von UnscharfeSuche()
$searchPattern - Das Suchmuster nach dem gehighlightet werden soll
$useHTML - Soll HTML in der Ausgabe verwendet werden
$highlightHits - Sollen Treffer markiert werden
$highlightPre - Mit was soll ein gefundener Treffer vor-markiert werden
$highlightPost - Mit was soll ein gefundener Treffer nach-markiert werden - Rückgabe:
string - Das formatierte Ergebnis - Erklärung:
Formatiert das Ergebnis der Suche für eine Ausgabe
- Parameter:
- Funktion HighlightHits
- Parameter:
$result - Die zu highlightende Zeile
$searchPattern - Das zu verwendende Suchmuster
$highlightPre - Was vor einen Treffer gesetzt werden soll
$highlightPost - Was nach einen Treffer gesetzt werden soll - Rückgabe:
string - Der gehighlightete String - Erklärung:
Sucht nach den relevanten Vorkommen von $searchPattern und markiert diese.
- Parameter:
- Funktion UnscharfeSuche (Hauptfunktion)
Verwendung/Aufruf und Suche:
PHP:
$array = file("./presidents.txt"); // Das für die Aufgabe als Beispiel beigelegte Textfile mit den Präsidenten
$searchPattern = "GB"; // Das zu suchenden Muster - kann sonst wo her eingelesen werden.
echo FormatSearchResult(UnscharfeSuche($searchPattern, $array), $searchPattern, TRUE); // Suchen und Ausgeben!
Sourcecode:
PHP:
function UnscharfeSuche($searchPattern /* e.g. "ooo" or "George Bush" */, $searchArray /* An array with one result-line per element */){
$results = array( 'count' => 0, 'elements' => array());
/*
Format der Results:
$results[' count '] - Anzahl der Ergebnisse
$results[' elements '] - Enthält die passenden Ergebnisse
*/
if (strlen(trim($searchPattern)) == 0) {
// Wir haben kein Suchmuster - d.h. keine Ergebnisse!
return $results;
}elseif (count($searchArray) == 0) {
// Wir haben keine Elemente in denen wir suchen können!
return $results;
}else {
foreach ($searchArray AS $value) {
if (strlen(trim($value)) > 0 /* Test if this is an empty line */) {
if (PatternMatchesString($searchPattern, $value)) {
$results['count'] += 1;
$results['elements'][] = $value;
}
}
}
return $results;
}
}
function PatternMatchesString($searchPattern /* SearchPattern in Stringform */, $searchIn /* The string in which we search*/) {
$searchPattern = StringToArray($searchPattern);
$searchIn = DeleteUnmentionedChars($searchIn, $searchPattern);
if ((strlen($searchIn) > 0) AND (count($searchPattern) > 0)) {
$pos = (-1); //Anfangsbelegung
for ($i = 0; $i < count($searchPattern); $i++) {
if ($pos == (-1)) {
if (($pos = strpos($searchIn, $searchPattern[$i])) === FALSE) {
return false;
}
}else {
if (($pos = strpos($searchIn, $searchPattern[$i], $pos+1)) === FALSE) {
return false;
}
}
}
return true;
}else {
return false;
}
}
// Converts a string to a simple array
function StringToArray($string /* e.g. "George Bush" */){
$result = array();
if (strlen($string) > 0) {
for ($i = 0; $i < strlen($string); $i++) {
$result[] = substr($string, $i, 1);
}
}
return $result;
}
// Deletes unwanted characters from the searchstring. After this operation we got only those chars left that are included in the searchstring
function DeleteUnmentionedChars($string /* e.g. "George W. Bush" */, $knownChars /* An Array with one character per element */){
$result = "";
if (strlen($string) > 0) {
for ($i = 0; $i < strlen($string); $i++) {
if (IsCharInArray(substr($string, $i, 1), $knownChars)) {
$result .= substr($string, $i, 1);
}
}
}
return $result;
}
function IsCharInArray($char /* eg. "G" */, $knownChars /* An Array with one character per element */){
if (array_search($char, $knownChars) === FALSE) {
return false;
}else {
return true;
}
}
// Returns a string
function FormatSearchResult($result, $searchPattern, $useHTML = TRUE, $highlightHits = TRUE, $highlightPre = "<", $highlightPost = ">"){
$searchPattern = StringToArray($searchPattern);
if ($useHTML) {
// Format with <br>\r\n
$format = "<br>\r\n";
}else {
// Format with \r\n
$format = "\r\n";
}
$return = "";
if ($result['count'] > 0) {
$return .= "Die Anfrage ergab ".(($result['count'] == 1) ? "einen" : $result['count'])." Treffer:".$format;
foreach ($result['elements'] AS $value) {
$return .= ($highlightHits ? HighlightHits($value, $searchPattern, $highlightPre, $highlightPost) : $value).$format;
}
}else {
$return .= "Die Anfrage ergab keine Treffer!";
}
return $return;
}
// Highlights the elements of the searchpattern in the String
function HighlightHits($result, $searchPattern, $highlightPre = "<", $highlightPost = ">"){
if ((strlen($result) > 0) AND (count($searchPattern) > 0)) {
$return = "";
for ($i = 0; $i < strlen($result); $i++) {
if (IsCharInArray(substr($result, $i, 1), $searchPattern)) {
$return .= $highlightPre.substr($result, $i, 1);
$j = $i + 1;
while (($j < strlen($result)) AND IsCharInArray(substr($result, $j, 1), $searchPattern)) {
$return .= substr($result, $j, 1);
$j++;
$i++;
}
$return .= $highlightPost;
}else {
$return .= substr($result, $i, 1);
}
}
}else {
return false;
}
return $return;
}
Anhänge
Zuletzt bearbeitet: