Natcasesort ohne Funktion

Guten Abend,

ich benutze das Suchskript von http://www.planetc.de/download/planetsearch/planetsearch.html. Jedoch will ich die Suchergebnisse natürlich sortieren lassen. Dafür habe ich “rsort” gegen “natcasesort” ersetzt. Leider hat sich die Sortierung nicht geändert.

Woran liegt das? Falsche Funktion? Habe ich etwas übersehen?

Danke im Voraus.

Gruß Elsner

[code]<?php

#############################
include ("./_bausteine/suche/config.inc.php");
#############################
$root_dir = $_SERVER[“DOCUMENT_ROOT”].$from_dir."/";

@setlocale(“LC_ALL”, “de_DE”);

Suchbegriff(e) übernehmen und umwandeln

$search_exp = strip_tags($_POST[“search_exp”]);

#############################
#Prüfen, ob ein Suchbegriff eingegeben wurde

if (!empty($search_exp)) {

Sonderzeichen entfernen

$frrepl = array("=+=", “=\s+=”);
$torepl = array("", " ");
$search_exp = preg_replace( $frrepl, $torepl, $search_exp);
$search_exp = preg_quote($search_exp);
$search_exp = trim($search_exp);

Zeichenanzahl des Suchbgeriffes prüfen

if (strlen($search_exp) < $sexp_length) {
// Template laden
$tmpl = join(’’, file("./_bausteine/suche/suchfehler.php"));
$tmpl = preg_replace("=[search_error_count]=", $error_count, $tmpl);
$tmpl = preg_replace("=[search_error_empty]=", “”, $tmpl);
eval(’?>’ . $tmpl);
} else {

Suchbegriffe in Array umwandeln und zählen

$search_arr = explode(" ",$search_exp);
$search_count = count($search_arr);

“Dummy”-Array für Such-Array erzeugen

$arr = array();
$arr_all = array();

Template laden

$tmpl = join(’’, file("./_bausteine/suche/suchergebnis.php"));

Bereich der Trefferanzeige aus dem Template ziehen

preg_match_all("=[SEARCH_START](.*)[SEARCH_STOP]=siU", $tmpl, $between);

$search_pages = 0;

$cont_part = walk_dir($root_dir); // Verzeichnisdurchlauf starten

$search_pages = count($cont_part); // Anzahl der Trefferseiten

natcasesort($cont_part); // Array sortieren

for ($j=0; $j<$search_pages; $j++) { // Arrays auslesen
list($anz_searchexp, $title, $descr, $new_path) = $cont_part[$j];
$content = preg_replace("=[SEARCH_TITLE]=", “$title”, $between[1][0]);
$content = preg_replace("=[SEARCH_LINK]=", “$from_dir”."$new_path", $content);
$content = preg_replace("=[SEARCH_DESC]=", “$descr”, $content);
$content = preg_replace("=[SEARCH_COUNT]=", “$anz_searchexp”, $content);
$cont_x .= $content;
}

// Suchergebnis zusammenstellen und anzeigen
$tmpl = preg_replace("=[SEARCH_START](.*)[SEARCH_STOP]=siU", $cont_x, $tmpl);
$search_exp = str_replace(’\’, ‘’, $search_exp);
$tmpl = preg_replace("=[SEARCH_WORDS]=", $search_exp, $tmpl);
$tmpl = preg_replace("=[SEARCH_PAGES]=", $search_pages, $tmpl);

if (empty($cont_part)) {
$tmpl = preg_replace("=[NO_MATCH]=", $no_match, $tmpl);
} else {
$tmpl = preg_replace("=[NO_MATCH]=", “”, $tmpl);
}

eval(’?>’ . $tmpl);

#################################################

Logdatei schreiben

foreach ($search_arr as $search_exp) {

$zeilen = file("./_bausteine/suche/_log/search_log.txt");
$anz_zeilen = sizeof($zeilen);

$x=0;

Datenfile auslesen

for ($i=0; $i<$anz_zeilen; $i++) {

list ($search_word, $search_num) = split("\\|", chop($zeilen[$i]));	

// wenn Suchbegriff gefunden wird
if ($search_exp==$search_word) {
	$search_num++;
	$i-2;
	$x++;
}
    $new_log .= "$search_word|$search_num\n";

}

// wenn der Suchbegriff nicht schon geloggt wurde
if ($x==0) {
$search_num = “1”;
$new_log .= “$search_exp|$search_num\n”;
}

$data = fopen("./_bausteine/suche/_log/search_log.txt",“w+”);
flock($data,1);
fwrite($data, $new_log);
flock($data,3);
fclose($data);
unset($new_log);
}
#################################################

}
}
#############################

Wenn kein Suchbegriff eingegeben wurde

else {
# Template laden
$tmpl = join(’’, file("./_bausteine/suche/suchfehler.php"));
$tmpl = preg_replace("=[search_error_count]=", “”, $tmpl);
$tmpl = preg_replace("=[search_error_empty]=", $error_empty, $tmpl);
eval(’?>’ . $tmpl);
}
#############################

#################################################

Function für den Verzeichnisdurchlauf und die Trefferermittlung

function walk_dir($dir, $pos=2)
{

global $search_exp, $search_arr, $search_count, $arr, $ignore_dir, $dat_type, $root_dir, $search_area, $cont_part, $no_title, $search_pages, $arr_all;

 $handle = @opendir($dir);
 while ($file = @readdir ($handle)) 
 {
    if (preg_match("=^\.{1,2}$=",$file))
    {
      continue;
    }

	$cut_dir = preg_replace("=$root_dir=siU", "", $dir); // Verzeichnisse zum Vergleich anpassen
	if (in_array($cut_dir, $ignore_dir)) continue; // zu ignorierende Verzeichnisse auslassen
	if (preg_match('=(_vti_cnf|_notes)=i', $cut_dir)) continue;

	if(is_dir($dir.$file))
    {
      walk_dir($dir.$file."/", $pos + 3);               
    }
    else
    {
    #########################################
	# Suche und Trefferanzeige
	#########################################
	$abs_dir = preg_replace("=$root_dir=","",$dir);		// absoluten Pfad ermitteln
	
	if (preg_match("=(\.$dat_type)$=",$file)) {		// wenn eine Datei eine zulässige Endung hat...

	$str = join('', file("$dir$file"));		// ...Datei einlesen


	if (!preg_match("=\<\!\-\-.no_search.\-\-\>=siU", $str)) { // auf auszuschließende Seiten prüfen

	$str = ch_uml($str); // Umlaute verarbeiten

	// Titel ermitteln
	preg_match("=<title>(.*)</title>=siU", $str, $title);

	// Meta-Beschreibung ermitteln
	preg_match('=<meta.*name\="description".*content\="(.*)".*>=siU',$str,$descr);

	// Keywords
	preg_match('=<meta.*name\="keywords".*content\="(.*)".*>=siU',$str,$keyw);

	// zu durchsuchender Bereich
	if ($search_area==1) {	// Titel, Description, Keywords
		$a = "$title[1]"."$descr[1]"."$keyw[1]"; 
	}
	else {	// alles
		$str = preg_replace("=\<\!\-\-.no_search_start.\-\-\>.*?\<\!\-\-.no_search_stop.\-\-\>=s", "", $str);
		$a = preg_replace("=<script.*>.*<\/script>=siU", "", $str); // JavaScript-Code entfernen
		$a = preg_replace("=<\?.*?\?>=s", "", $a); // PHP-Tags löschen um nur Text zu durchsuchen
	    $a = preg_replace("=(<[^>]+>)=siU", "", $str); // Tags löschen um nur Text zu durchsuchen
		$a .= "$title[1]"."$descr[1]"."$keyw[1]";
	}

	$i=0;

	foreach ($search_arr as $search_word) {		// jeden Suchbegriff prüfen
	if (preg_match("=($search_word)=i", $a)) {		// wenn Suchbegriff vorkommt...

		$anz_searchexp += preg_match_all("=$search_word=siU", $a, $nullinger);

	$i++;		// i für jeden gefundenen Suchbegriff erhöhen

	if ($i==$search_count) {		// wenn ALLE Suchbegriffe gefunden wurden...


		if (!empty($title[1]))		// Title der Seite auslesen
		{
			$new_title = "$title[1]";
			$new_path = "/$abs_dir$file";
		}
		else {
			$new_title = "$no_title";
			$new_path = "/$abs_dir$file";
		}

		if (!empty($descr[1]))	// description auslesen
		{
			$new_descr = "$descr[1]";
		}
		else {
			$new_descr = "";
		}

	if (!preg_match("=^\(\.\*\)$=", $new_title)) {
		$s_show = array();
		$s_show[] = $anz_searchexp;
		$s_show[] = $new_title;
		$s_show[] = $new_descr;
		$s_show[] = $new_path;
		array_push($arr_all, $s_show);
	}

	unset($str, $anz_searchexp);
	}
	}
	}
}

}
#########################################
#########################################
}
}
$cont_part = $arr_all;
return ($cont_part);
@closedir($handle);
}

Funktion ende

#################################################

// Umlaute bearbeiten
function ch_uml($del_uml) {
$del_uml = preg_replace("=ä=", “ä”, $del_uml); // Umlaute und ß
$del_uml = preg_replace("=ö=", “ö”, $del_uml);
$del_uml = preg_replace("=ü=", “ü”, $del_uml);
$del_uml = preg_replace("=Ä=", “Ä”, $del_uml);
$del_uml = preg_replace("=Ö=", “Ö”, $del_uml);
$del_uml = preg_replace("=Ü=", “Ü”, $del_uml);
$del_uml = preg_replace("=ß=", “ß”, $del_uml);
return ($del_uml);
} // end func

#################################################
?>[/code]

Du müsstest das Array danach mit foreach oder ähnlichem durchlaufen, da natcasesort die Reihenfolge im Array nur intern ändert, Schlüssel und Werte aber erhalten bleiben

Vielen Dank. Das war mir nicht bewusst. Dann werde ich mich wohl etwas mit foreach auseinander setzen.