08.04.2007
PHP-Arger mit Array_slice
Fast angekommen … die folgende Funktion scheint zu funktionieren. Doch glücklicher oder trauriger Weise erwischte ich beim Test-Array eine Variation, bei der es eben nicht funktioniert.
Die verflixte 13 … siehe kleine Demo: Kapitelnummern
Ich habe in dem Programmcode darauf verzichtet, die in der Minidemo verwendete Ausgabe ebenfalls aufzuführen. Die Buchstaben A-C stehen für jeweils zuständige die If-Klausel, es folgt das aktuelle Array-Element, dann die daraus ermittelte Ebene und schließlich die erzeugte Kapitelnummer.
<?php$jump = array(0,0,0,1,1,0,1,-2,1,0,0,1,-3,0,0);$chapNr = array();$level = array();$m = 0;$n = count($jump);$level[0] = 0;$chapNr[0] = 1;$chap = array($chapNr[0]);$chapIndex[0] = implode('.',$chap);for($m=0; $m<$n; $m++){$level[$m] = $m>0 ? $level[$m-1]+$jump[$m] : $level[$m];if($m>0){//A) Same levelif($jump[$m]==0){array_push($chap, array_pop($chap)+1);$chapIndex[$m] = implode('.',$chap);}//B) Level belowelseif($jump[$m]==1){array_push($chap, 1);$chapIndex[$m] = implode('.',$chap);}//C) Level by 'x' upelseif($jump[$m]<0) {$chap = array_slice($chap, 0, $level[$m]);array_push($chap, array_pop($chap)+1);$chapIndex[$m] = implode('.',$chap);}}//END M>0}//END FOR?>
Wenn ich jetzt nur noch wüsste, warum es nicht klappt. PHP scheint nicht gerade die zuverlässigste Programmiersprache zu sein. Ich weiß, dass PHP nicht sonderlich auf den Variablentyp achtet, doch will mir einleuchten, was das in diesem Fall mit dem fehler zu tun hat. *GRRRRRRH*
Eine Forschleife um $array_slice($chap, 0, $level[$m]); zu ersetzen
Wenn es nicht elegant mit Chauffeur geht, dann eben zu Fuß.
$chapTmp = array();$chapStop = $level[$m]==0? 1 : $level[$m];for($mfx = 0; $mfx<$chapStop; $mfx++ ){array_push($chapTmp, $chap[$mfx]);}$chap = $chapTmp;//$chap = array_slice($chap, 0, $level[$m]);
Und gucken, ob's klappt: Demo Kapitelnummern mit der For-Schleife => Tut! :harr:
In dieser Reihe erschienen:
- 16.3.2007 — Programmplanung Editland-Menü
- 17.3.2007 — Der Linkbaum der Navigation in Editland
- 1.4.2007 — Was Kapitelnummern mit Array_slice() zu tun haben
- 4.4.2007 — Editland-Navigation mit doSimple Flyout verheiratet
- 8.4.2007 — PHP-Arger mit Array_slice
Filed under: Programmierung
No Comments