Hallo,
ich habe eigentlich nur Ahnung von Design, habe aber für eine NGO mal ein, auf Wordpress basierendes, Intranet gebastelt.
In einem anderen Forum habe ich nun schon gelernt, wie ich den monatlichen Dienstplan als .txt-Datei auslesen kann, und bestimmte Elemente als Array ausgeben kann.
Was möchte ich nun beigebracht bekommen?
1.) Wie kann ich den individuellen Dienstplan der jeweiligen Personal Nummern ausgeben? Beispiel: "Wenn User eingeloggt ist, und die UserID -> 20 hat, zeige den gesamten Inhalt des Array mit der Personalnummer [1234]?
2.) Im Moment ist dieses Script noch so aufgebaut, dass ich den Dienstplan.txt nicht von einer externen URL laden kann. Wie muss ich das Script verändern, damit ich den z.B. von http://malteser.org/bo/pb/dienstplan.txt laden kann?
Mit dieser Datei lese ich den Dienstplan aus:
<pre>
<?php
//den tabulator als Trennzeiche definieren
define('C_DELIM', "\t");
//Testdaten
$filename = 'Dienstplan.txt';
$selectedSchicht = 'Bo';
//Zeilenfilter. Wenn die getrimmte Zeile keine Läng mehr hat - ignorieren
function lineFilter($line){
return (strlen(trim($line)) > 1);
}
//Die Zeile in die Fleder aufteilen und jedes Feld noch mit trim() auf die wirkliche Grösse kürzen
function explodeLine($line){
return array_map('trim', explode(C_DELIM, $line));
}
//Analog zu explodeLine. Jedoch wird der Array-Index mit der Heeaderzeile als Keys ergänzt
function explodeLineWithHeader($header, $line){
$values = explodeLine($line);
return array_combine($header, $values);
}
//Datei einlesen
$lines = file($filename);
//Leere Zeilen ausfiltern
$lines = array_filter($lines, 'lineFilter');
//Array der Kopfdaten erstellen
$header = explodeLine(array_shift($lines));
//Array mit den Aufnahemhäuesern erstellen (key = Kopfdaten)
$aufnahmehaus = explodeLineWithHeader($header, array_shift($lines));
//Zur späteren weiterverwednung alle User-Infos sammeln
$userInfos = array();
$userTermine = array();
$selected = array();
//Jede Datenzeile durchgehen
foreach($lines as $line){
//Die Zeile mal in die Fleder aufteilen
$row = explodeLineWithHeader($header, $line);
//Die User-Infos extrahieren
$userInfos[$row['Pers.-Nr.']] = $userInfo = array_slice($row, 0, 3, true);
//Die Schichtzuteilungen auslesen
$userTermine[$row['Pers.-Nr.']] = $userTermin = array_slice($row, 3, NULL, true);
//Jeden Termin prüfen ...
foreach($userTermin as $termin => $schicht){
//... ob er mit $selectedSchicht beginnt
if(substr($schicht, 0, strlen($selectedSchicht)) == $selectedSchicht){
//Wenn ja, in den Resultaten-Array schreiben
$selected[$termin] = array(
'user' => $userInfo['Pers.-Nr.'],
'aufnahmehaus' => $aufnahmehaus[$termin]
);
}
}
}
//Sortieren
ksort($selected);
echo "=== \$selected ===\n";
print_r($selected);
echo "=== \$userInfos ===\n";
print_r($userInfos);
echo "=== \$userTermine ===\n";
print_r($userTermine);
?>
</pre>
Alles anzeigen
So sieht die Ausgabe der individuellen Einsatzpläne nach Personalnummer geordnet aus:
=== $userTermine ===
Array
(
[1234] => Array
(
[01.06.2011] =>
[02.06.2011] =>
[03.06.2011] =>
[04.06.2011] =>
[05.06.2011] =>
[06.06.2011] => UrA
[07.06.2011] => UrA
[08.06.2011] => UrA
[09.06.2011] => UrA
[10.06.2011] => UrA
[11.06.2011] =>
[12.06.2011] =>
[13.06.2011] =>
[14.06.2011] => UrA
[15.06.2011] => UrA
[16.06.2011] => UrA
[17.06.2011] => UrA
[18.06.2011] =>
[19.06.2011] =>
[20.06.2011] => UrA
[21.06.2011] =>
[22.06.2011] =>
[23.06.2011] =>
[24.06.2011] =>
[25.06.2011] =>
[26.06.2011] =>
[27.06.2011] =>
[28.06.2011] =>
[29.06.2011] =>
[30.06.2011] =>
)
[1235] => Array
(
[01.06.2011] =>
[02.06.2011] =>
[03.06.2011] =>
[04.06.2011] =>
[05.06.2011] =>
[06.06.2011] =>
[07.06.2011] =>
[08.06.2011] =>
[09.06.2011] =>
[10.06.2011] =>
[11.06.2011] =>
[12.06.2011] =>
[13.06.2011] => Bo24
[14.06.2011] =>
[15.06.2011] =>
[16.06.2011] =>
[17.06.2011] =>
[18.06.2011] =>
[19.06.2011] =>
[20.06.2011] =>
[21.06.2011] =>
[22.06.2011] => FW
[23.06.2011] =>
[24.06.2011] => FW
[25.06.2011] =>
[26.06.2011] =>
[27.06.2011] =>
[28.06.2011] =>
[29.06.2011] => KTW
[30.06.2011] =>
)
[1236] => Array
(
[01.06.2011] => BoN
[02.06.2011] =>
[03.06.2011] =>
[04.06.2011] =>
[05.06.2011] =>
[06.06.2011] =>
[07.06.2011] =>
[08.06.2011] =>
[09.06.2011] =>
[10.06.2011] =>
[11.06.2011] =>
[12.06.2011] =>
[13.06.2011] =>
[14.06.2011] =>
[15.06.2011] =>
[16.06.2011] =>
[17.06.2011] =>
[18.06.2011] =>
[19.06.2011] =>
[20.06.2011] =>
[21.06.2011] =>
[22.06.2011] =>
[23.06.2011] => zV
[24.06.2011] =>
[25.06.2011] =>
[26.06.2011] =>
[27.06.2011] =>
[28.06.2011] =>
[29.06.2011] =>
[30.06.2011] =>
)
[1237] => Array
(
[01.06.2011] => KTW
[02.06.2011] =>
[03.06.2011] => KTW
[04.06.2011] => Bo24
[05.06.2011] =>
[06.06.2011] => QM
[07.06.2011] =>
[08.06.2011] => Hö 24
[09.06.2011] =>
[10.06.2011] =>
[11.06.2011] =>
[12.06.2011] => Hö 24
[13.06.2011] =>
[14.06.2011] =>
[15.06.2011] =>
[16.06.2011] =>
[17.06.2011] =>
[18.06.2011] => HöT
[19.06.2011] =>
[20.06.2011] => KTW
[21.06.2011] => KTW
[22.06.2011] => FW
[23.06.2011] =>
[24.06.2011] => FW
[25.06.2011] =>
[26.06.2011] =>
[27.06.2011] =>
[28.06.2011] =>
[29.06.2011] =>
[30.06.2011] =>
)
[1238] => Array
(
[01.06.2011] =>
[02.06.2011] =>
[03.06.2011] =>
[04.06.2011] =>
[05.06.2011] =>
[06.06.2011] =>
[07.06.2011] => BoN
[08.06.2011] => BoT
[09.06.2011] =>
[10.06.2011] =>
[11.06.2011] => Bo24
[12.06.2011] =>
[13.06.2011] =>
[14.06.2011] =>
[15.06.2011] =>
[16.06.2011] =>
[17.06.2011] =>
[18.06.2011] =>
[19.06.2011] =>
[20.06.2011] =>
[21.06.2011] => FW
[22.06.2011] =>
[23.06.2011] =>
[24.06.2011] => BoT
[25.06.2011] => Bo24
[26.06.2011] =>
[27.06.2011] =>
[28.06.2011] => BoN
[29.06.2011] =>
[30.06.2011] => Bo24
)
)
Alles anzeigen