php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 19.10.2006, 09:34  
Erfahrener Benutzer
 
Registriert seit: 01.06.2004
Beiträge: 136
NetLook
Standard Könnt ihr einen Fehler erkennen?!

Hallo!

Könnt ihr einen Fehler erkennen?! Einfach bitte nur schauen, ob ein Fehler oder irgendwas enthalten ist, was Probleme machen könnte.

Code:
function Vergleich($AlleDateien,$suchwort)
{
$AllWords = array();
	foreach($AlleDateien as $AllZeilen){
	$zeile = file($AllZeilen);
		foreach($zeile as $wort){
		// Zeile wird in einzelne Wörter zerlegt
		$wort = strtok($wort," ");
			// Wörter der Zeile werden von Code gesäubert und dem Array zugefügt
			while ($wort !== false) {
			$wort = strip_tags($wort);
			array_push($AllWords,$wort);
			}
		}
	}
}
__________________
Gruß
NetLook

www.werbeset.com
NetLook ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 19.10.2006, 10:35  
¯\_(ツ)_/¯
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.814
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

Also erstmal was willst du überhaupt? Die Funktion macht genau dass was du da zusammen geschrieben hast! Fragt sich nur was du willst. Sollen wir hier wieder alles erraten?

Haste denn selber schonmal ausprobiert ob alles richtig funktioniert? Das ist doch wohl die einfachste Lösung oder?

Was mir direkt auffällt:

- Warum machst du am Ende ne while Schleife? Solltest wieder ne foreach() Schleife nehmen.
- In der while() Schleife wird das Array $wort direkt überschrieben ...
- Verwende mal anstatt strtok einfach explode(' ', $wort); und dann eben mit foreach()
- Du hast nichtmal nen return in deiner Funktion! Wo soll den da was zurück gegeben werden?
__________________
▇█▓▒░◕‿‿◕░▒▓█▇
Flor1an ist offline  
Alt 19.10.2006, 10:40  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Die Funktion erstellt einen Haufen Variablen, aber nachdem die Funktion beendet ist gehen sie alle verloren, weil du keinen Rückgabewert definiert hast.

Ich würde übrigens strip_tags() gleich ganz am Anfang machen. Auf die ganze Datei am besten.

Übrigens ist deine Variablenbenennung falsch. $AllZeilen beinhaltet eigentlich den Dateinamen, $zeile ist der komplette Dateiinhalt als Array und $wort eine einzelne Zeile.
Zergling-new ist offline  
Alt 19.10.2006, 14:50  
Erfahrener Benutzer
 
Registriert seit: 01.06.2004
Beiträge: 136
NetLook
Standard

Hi!

Es ist ein Teil des Scripts für eine Suchfunktion, wenn ich das ganze Script hier reinposte, wäre ein bischen viel. In diesem Teil werden alle Wörter, aller Zeilen, aller Dateien in ein Array gespeichert. Dieses Array dient dann für einen Vergleich mit dem Suchwort, um Alternativen vorzuschlagen. Ich habe den einen Teil geändert und funktioniert auch.

Code:
function Vergleich($AlleDateien,$suchwort)
{
echo "Oder meinten Sie: ";
$AllWords = array();
	foreach($AlleDateien as $AllZeilen){
	$zeile = file($AllZeilen);
		foreach($zeile as $wort){
		// Wörter der Zeile werden von Code gesäubert und dem Array zugefügt
		$CleanWort = strip_tags($wort);
				// Zeile wird in einzelne Wörter zerlegt
				$EinzWoerter = split(" ",$CleanWort);
					foreach($EinzWoerter as $EinzWort) {
						$EinzWort = trim($EinzWort);
						if($EinzWort!=""){
						array_push($AllWords,$EinzWort);
						}
					}
				}
			}
Im 2ten Code Abschnitt werden nun alle Wörter des Arrays mit dem Suchwort verglichen und bei hoher Ähnlichkeit als Alternative ausgegeben!

Code:
// Doppelte Werte werden aus dem Array entfernt
$AllWordsFilter = array_unique($AllWords);
	foreach($AllWordsFilter as $woerter){
		similar_text ($suchwort,$woerter,$prozent);
		$prozent = sprintf('%01.2f', $prozent);
		//Wenn das Suchwort im Vergleichswort enthalten ist
		//oder die Ähnlichkeit höher als 60% ist, soll das Vergleichswort als Alternative angeboten  werden
			if(preg_match($suchwort,$woerter)||$prozent>60.00){
			echo "".$woerter."
";
				}
			}
}
Und hier muss auch was falsch sein, es erscheint keine Fehlermeldung, sondern das Script wird abgebrochen?! Nehme ich diesen 2ten Teil raus funktioniert alles?!
__________________
Gruß
NetLook

www.werbeset.com
NetLook ist offline  
Alt 19.10.2006, 15:28  
Erfahrener Benutzer
 
Registriert seit: 01.06.2004
Beiträge: 136
NetLook
Standard

So funktioniert es:

Code:
// Doppelte Werte werden aus dem Array entfernt
//$AllWords = array_unique($AllWords);
	foreach($AllWords as $woerter){
		similar_text ($suchwort,$woerter,$prozent);
		$prozent = sprintf('%01.2f', $prozent);
		//Wenn das Suchwort im Vergleichswort enthalten ist
		//oder die Ähnlichkeit höher als 60% ist, soll das Vergleichswort als Alternative angeboten  werden
			if(preg_match("/".$suchwort."/i",$woerter)||$prozent>60.00){
			echo "".$woerter."
";
				}
			}
}
Doch ich möchte die doppelten Werte aus dem Array entfernen, doch sobald ich array_unique($AllWords); verwende, funktioniert es nicht mehr richtig?!
__________________
Gruß
NetLook

www.werbeset.com
NetLook ist offline  
Alt 19.10.2006, 15:56  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.241
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

-deine php version ist hoffentlich >= 4.0.1 ?
-hat es nen grund, daß es jetzt $AllWords statt $AllWordsFilter heißt?
-nur am rande, wenn es dann mal läuft, würde ich hier die bedingungen tauschen:
Code:
if (preg_match("/".$suchwort."/i",$woerter) || $prozent>60.00)
unter umständen sparst Du PHP dann die ausführung des reg. ausdrucks...
nikosch ist offline  
Alt 20.10.2006, 10:52  
Erfahrener Benutzer
 
Registriert seit: 01.06.2004
Beiträge: 136
NetLook
Standard

So hat es nun funktioniert!

Code:
function Vergleich($AlleDateien,$suchwort)
{
echo "Oder meinten Sie: 
";
$AllWords = array();
	foreach($AlleDateien as $AllZeilen){
	$zeile = file($AllZeilen);
		foreach($zeile as $wort){
		// "HTML Wörter" werden in normale Wörter umgewandelt
		$CleanWort = html_entity_decode($wort);
		// Wörter der Zeile werden von Code gesäubert und dem Array zugefügt
		$CleanWort = strip_tags($CleanWort);
				// Zeile wird in einzelne Wörter zerlegt
				$EinzWoerter = split(" ",$CleanWort);
					foreach($EinzWoerter as $EinzWort) {
						$EinzWort = preg_replace('~[^\w-]~', '', $EinzWort);
						$EinzWort = trim($EinzWort);
						if($EinzWort!=""){
						array_push($AllWords,$EinzWort);
						}
					}
				}
			}
// Doppelte Werte werden aus dem Array entfernt
$AllWords = array_unique($AllWords);

// Suchwort wird mit "relevanten" Wörtern verglichen
	foreach($AllWords as $woerter){
		similar_text ($suchwort,$woerter,$prozent);
		$prozent = sprintf('%01.2f', $prozent);
		//Wenn das Suchwort im Vergleichswort enthalten ist
		//oder die Ähnlichkeit höher als 60% ist, soll das Vergleichswort als Alternative angeboten  werden
			if($prozent>60.00||preg_match("/".$suchwort."/i",$woerter)){
			echo "".$woerter."
";
				}
			}
}

Ich hatte gestern zum 1x mit Zend Development gearbeitet und beim durchlaufen des Codes habe ich ab und zu auf Stop geklickt, daraufhin wurde auch der Vorgang im Browser abgebrochen und es wurde nur zum Teil ausgegeben. Ich dachte aber es wäre ein Fehler im Script. Naja man lernt nie aus, vielen Dank für eure Hilfe!!!
__________________
Gruß
NetLook

www.werbeset.com
NetLook ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
bitte hilfe! mysql fehler meldung: basicx PHP Tipps 2008 2 22.07.2008 16:36
mysql fehler meldung: basicx Datenbanken 1 22.07.2008 09:48
Mysql Syntax Fehler Datenbanken 3 06.07.2006 09:58
Fehler bei Javascript und Klammernsetzen HTML, Usability und Barrierefreiheit 8 28.07.2005 22:41
Seite wird nicht angezeigt, untersch. Fehler bei IE/FF/Safar PHP-Fortgeschrittene 19 31.05.2005 14:52
Blöder MySQL Fehler PHP Tipps 2005 3 15.05.2005 03:14
Fehlermeldung - aber kein fehler... Tschuu HTML, Usability und Barrierefreiheit 16 14.03.2005 15:56
finde fehler trotz manual nicht: SELECT lindner Datenbanken 3 13.03.2005 08:39
[Erledigt] Wo liegt der fehler?? PHP-Fortgeschrittene 5 22.12.2004 09:54
[Erledigt] mysql fehler PHP Tipps 2004 2 03.11.2004 00:32
Wo ist der Fehler? socke Datenbanken 10 01.11.2004 18:10
Hilfe ich finde den Fehler nicht! PHP Tipps 2004 2 07.10.2004 17:40
array_push nur in begrenzter Anzahl ausführen ? PHP Tipps 2004 2 07.09.2004 09:05
mysql_real_escape_string - Fehler Schaelle Datenbanken 0 03.07.2004 23:32
Paradox, Fehler bei Berechnung in MySQL MrNiceGuy Datenbanken 0 23.06.2004 16:09

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
fehlerbilder erkennen, vergleichswort

Alle Zeitangaben in WEZ +1. Es ist jetzt 12:38 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.