• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Datei suchen - erste fünf Zeichen bekannt.

Klopp1991

Neues Mitglied
Ich kenne die ersten Zeichen einer Datei. Wie kann ich nun danach "suchen"? Ich stell es mir so vor das ich wie im Explorer eigentlich suchen kann nach "12345*" und er mir die entsprechenden Dateien ausgibt. Ich denke nicht das es eine Rolle spielt, aber jede Datei ist über die ersten fünf Zeichen identifizierbar, also sollte jeweils nur eine Datei gefunden werden.
 
Werbung:
hmm, du lässt dir alle dateien in einen array packen.
dann lässt du jeden arrayeintrag durch ne schleife durch und untersuchst die ersten 5 buchstaben!
wenn es zutrifft gibst du diese aus, wenn nicht dann halt nicht!

das ist das grundprinzip wies am einfachsten funktioniert!
natürlich ist dies ein großes gebiet mit dem man sich intensiv beshcäftigen kann um die suche zu optimieren......in den array nur den namen packen, nicht die endung...und dann halt das große thema wie suchen.....sortieren?

Stichwort: Sortieralgorithmen

erst sortieren und dann suchen?
wie sortieren?
wie suchen....lineares suchen oder mit bisektion?:D

aber ich glaube das ist zu umfangreich bzw gehört eher in scriptoptimierung!
ich glaube wenn du die optimalste suche haben willst brauchst da schon ein bisschen;9

mfg
 
Werbung:
hab dir da mal was gebaut das sollte funktionieren und schnell sein ^^
anstadt wie jeder otto normal php entwickler füge ich die ganzen dateinamen bevor ich sie prüfe zu einem string zusammen den ich mit \n trenne so kann ich alle dateinamen auf einmal durchsuchen was im vergleich zu anderen funktionen besonders bei ordnern mit vielen dateien auffällt ^^

also viel spaß damit :p und wenn du probleme hast meld dich ^^

PHP:
/**
 * usage:
 * 
 * searchFiles('someFile.+');
 * 
 * when you want to search case sensitive you have to write
 * 
 * searchFiles('someFile.+', true);
 * 
 * or with an root dir and not case sensitive
 * 
 * searchFiles('someFiles+', false, './some/folder/');
 * 
 * + = there must be something
 * * = there can be something
 * 
 * if you want to search for * or + you have to escape them
 * \\* or \\+
 * 
 * there are some special characters like (){}[].-*+?$^! and some more which have to be escaped to ^^
 */
function searchFiles($search, $case = false, $dir='./', $parse = true) {
    if(!file_exists($dir) || !is_dir($dir)) {
		throw new Exception('Der angegebene Ordner existiert nicht oder ist kein Ordner.');
	}
	
	$lastChar = substr($dir, -1);
	if($lastChar != '/' && $lastChar != '\\') {
		$dir .= '/';
	}
	
	if($parse) {
		$search = preg_replace('/(?!\\\)(\*|\+)/', '.$2', $search);
	}
	
	$list = array();
	$searchString = '';
	$h = opendir($dir);
	while(($file = readdir($h)) !== false) {
		if($file == '.' || $file == '..') {
			continue;
		}
		
		$searchString .= $file . "\n";
		
		if(is_dir($dir . $file) && !is_link($dir . $file) && is_readable($dir . $file)) {
			$erg = searchFiles($search, $case, $dir . $file . '/', false);
			if(count($erg)) {
				$list = array_merge($list, $erg);
			}
		}
	}

	$matches = array();
	if(preg_match_all('/^(.*)'.$search.'(.*)$/'.($case ? 'i' : ''), $searchString, $matches)) {
		$list = array_merge($list, $matches[0]);
	}
	
	return $list;
}
 
Zuletzt bearbeitet von einem Moderator:
>>zu einem string zusammen den ich mit \n trenne so kann ich alle dateinamen auf einmal durchsuchen was im vergleich zu anderen funktionen besonders bei ordnern mit vielen dateien auffällt ^^

hmm...ich glaub kaum dasses schneller geht wenn du die dateien klugerweise:D in einem string speicherst anstatt in nem array!
Ich denke dass array dafür die einzige wirkliche lösung ist, nichts mit string!
Mit dem array kannst du doch die dateien viel einfach durchlaufen als mit deinen zeilenumbrüchen...
Ich kenne keinen sortier bzw suchalgorithmus der mit strings arbeitet!
und wieso?...weil arrays dafür besser geeignet sind.....und weil das so ist, tut das auch jeder otto normal php entwickler;)
 
aber bei einem array musst du jedes eintrag einzeln untersuchen und einen strink kannst du in einem durchlauf durchsuchen, nu klar warum das schneller ist? ^^

also bitte... wenn du nächstes mal meckerst mach n benchmark ^^
 
Werbung:
Zurück
Oben