Skip to main content

Alles für die Homepage... Scripte, Templates, Workshops und Support

Daten einen selbstdefinierten Index zuweisen

Oft kann es nützlich sein Daten beim speichern einen eigens dafür optimierten Sortierindex zuzuweisen. Einsatzzwecke können sein: Zusammenfassung von Wortlisten (z.B. die Worte die mit A,a,Ä,ä beginnen unter Buchstabe A abzulegen, oder das verschieben von Dateien mit bestimmten Endungen in festgelegte Zielverzeichnisse.

1. Beispiel, Begriffen eine Index zuordnen

Der unterhalb dargestellte Code verarbeitet ein Array von Daten und weist, je nach Anfangsbuchstabe/Zeichen, diesen einen Index zu. Das in der function notierte $indexarray enthält in dem assiozativem Array als Key Werte die Testzeichen, als Value den Indexwert.

Mittels der substr Funktion wird der das erste Zeichen jedes übergebenen Begriffes ermittelt, danach wird in der while Schleife das Array solange abgearbeitet bis der passende Indexwert gefunden wurde.

Für Eingaben die nicht zugeordnet werden können wurde am Schluss ein Defaultindex definiert.

CODE:
$datei_index = $gefunden == 1 ? $datei_index : '*';

Dieser greift nur wenn nichts im Indexarray gefunden wurde und weist das Zeichen * zu.

CODE:
<?php
// Beispieldaten die sortiert werden sollen
$eingabe = array('Überraschung', 'Telefon', '9190 8754', '_TXT_');

// Schleife zur Bearbeitung aller Daten
foreach ($eingabe as $values) {

echo "Wert <b>$values</b> wird Index <b>" . indexer($values) . "</b> zugeordnet<br>\n";
}

// Die Indexfunktion
function indexer($wert) {

$indexarray = array(
'1,2,3,4,5,6,7,8,9,0'     => '0-9',
'A,a,Ä,ä'                 => 'A',
'B,b'                     => 'B',
'C,c'                     => 'C',
'D,d'                     => 'D',
'E,e'                     => 'E',
'F,f'                     => 'F',
'G,g'                     => 'G',
'H,h'                     => 'H',
'I,i'                     => 'I',
'J,j'                     => 'J',
'K,k'                     => 'K',
'L,l'                     => 'L',
'M,m'                     => 'M',
'N,n'                     => 'N',
'O,o,Ö,ö'                 => 'O',
'P,p'                     => 'P',
'Q,q'                     => 'Q',
'R,r'                     => 'R',
'S,s'                     => 'S',
'T,t'                     => 'T',
'U,u,Ü,ü'                 => 'U',
'V,v'                     => 'V',
'W,w'                     => 'W',
'X,x'                     => 'X',
'Y,y'                     => 'Y',
'Z,z'                     => 'Z',
);

$erstes_zeichen = substr($wert, 0, 1);

$gefunden = 0;
while(list($key, $val) = each ($indexarray)){
$keydata = explode(',', $key);
    if(in_array($erstes_zeichen, $keydata)) {
    $datei_index = $val;
    $gefunden = 1;
    break;
    }
}

$datei_index = $gefunden == 1 ? $datei_index : '*';

return $datei_index;

}

?>

Scriptausgabe

Wert Überraschung wird Index U zugeordnet
Wert Telefon wird Index T zugeordnet
Wert 9190 8754 wird Index 0-9 zugeordnet
Wert _TXT_ wird Index * zugeordnet

Die nächste Seite beschreibt in einem Praxisbeispiel das zuweisen von Zielverzeichnissen für Dateitypen nach Endung.

2. Beispiel, zuordnen von Verzeichnissen nach Dateiendung

Bei Dateiuploads möchte man vielleicht gern das die Dateien, je nach Endung, in seperate Verzeichnisse verschoben werden. Auch hier kann man wieder ein Indexarray anlegen was im Key die Endungen speichert, im Value des assoziativen Arrays die Verzeichnisnamen.

1. Das komplette Script

CODE:
<?php

$eingabe = array('rechnung.txt', 'bild.gif', 'tabelle.xls', 'music.wav', 'datei.swf',  'programm.tar.gz');

foreach ($eingabe as $values) {

echo "Wert <b>$values</b> wird in Verzeichnis <b>" . indexer($values) . "</b> gespeichert<br>\n";
}

function indexer($wert) {

$indexarray = array(
'gif,jpg,png'             => 'bilder',
'txt,dat'                 => 'texte',
'zip,rar,tar,tar.gz'     => 'zip',
'wav,mid,avi'             => 'wav',
'swf'                     => 'flash',
'doc,xls,odt'             => 'dokumente'
);

$name_endung = explode('.', $wert);

if (preg_match("/(.*)\.tar\.gz$/i", $wert)) {
    
    $endung = 'tar.gz';

} else {
    
    $endung = array_pop($name_endung);
}


$gefunden = 0;
while(list($key, $val) = each ($indexarray)){
$keydata = explode(',', $key);
    if(in_array($endung, $keydata)) {
    $datei_index = $val;
    $gefunden = 1;
    break;
    }
}

$datei_index = $gefunden == 1 ? $datei_index : 'allgemein';

return $datei_index;

}

?>

HINWEIS Normalerweise testet man bei der Dateiendung auf das was nach dem letzten . Punkt steht. Es gibt aber auch Dateien, wie z.B. das hier dargestellte tar.gz als Dateiendung. Hier ermittelt man zunächst mittels preg_match ob es sich um eine solche Datei handelt, wenn ja wird als Value für $endung tar.gz zugewiesen. Das braucht natürlich nur getestet werden wenn für Uploads auch ein solcher Dateityp erlaubt wurde.

Dieses Script eignet sich z.B. auch dazu wenn man Dateien per FTP auf den Server in ein Verzeichnis lädt und die Dateien dann per browserbasiertem Formular noch mit Texten versehen will, beim speichern wird dann die Endung getestet und die Datei an den Zielort verschoben.

Ebenso kann man damit Dateien für Mitglieder bereitstellen, hat man z.B. Rechnungen eines bestimmten Datums oder Namensformates, Daten hochladen, Script aufrufen und Daten in Mitgliederverzeichnisse verschieben lassen.

Die Daten des Indexarrays können natürlich auch als externe Datendatei abgelegt werden, auch ist eine datenbankbasierte Speicherung ist möglich.

2. Die Scriptausgabe

Wert rechnung.txt wird in Verzeichnis texte gespeichert
Wert bild.gif wird in Verzeichnis bilder gespeichert
Wert tabelle.xls wird in Verzeichnis dokumente gespeichert
Wert music.wav wird in Verzeichnis wav gespeichert
Wert datei.swf wird in Verzeichnis flash gespeichert
Wert programm.Tar.Gz wird in Verzeichnis zip gespeichert

Anzeige
Amazon Affiliate WordPress Plugin - Das #1 Plugin für erfolgreiches Affiliate Marketing


Ähnliche Beiträge



Keine Kommentare vorhanden


Du hast eine Frage oder eine Meinung zum Artikel? Teile sie mit uns!

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *