Array ausgeben

Hallo,

vielleicht kann mir jemand bei der Lösung folgenden Problems helfen.

Es liegt ein bereits sortiertes Array vor, zum Beispiel:

Array (
 [0] =\> a.doc
 [1] =\> b.doc
 [2] =\> c.doc
 [3] =\> a.ppt
 [4] =\> b.ppt
 [5] =\> c.ppt
 [6] =\> a.xls
 [7] =\> b.xls
 [8] =\> c.xls
)

Die Ausgabe soll so aussehen:

doc:
a.doc
b.doc
c.doc

ppt:
a.ppt
b.ppt
c.ppt

xls:
a.xls
b.xls
c.xls

Wie stelle ich das an?

Liebe Grüße
Hugo

Hallo hugo,

du musst eigentlich nur durch das Array iterieren (z.B. mittels einer foreach-Schleife) und die einzelnen Werte ausgeben. Vor der Ausgabe jedes Arrayelements überprüfst du ob sich die Dateiendung geändert hat und im Fall dass dies zutrifft, gibst du die Überschrift aus.

Müsste also irgendwas in die Richtung sein (ACHTUNG!!! ungetestet, nur schnell runter getippt):

<?php $arr = array (
[0] =\> a.doc [1] =\> b.doc [2] =\> c.doc [3] =\> a.ppt [4] =\> b.ppt [5] =\> c.ppt [6] =\> a.xls [7] =\> b.xls [8] =\> c.xls ) $fileExtension = null; foreach ($arr as $value) { if (fileExtension == null || !endsWith($value, fileExtension)) { if (fileExtension != null) { echo "\n"; } fileExtension = substr(value, strrpos($value, ".") + 1); echo fileExtension.":"; } echo $value; } // return true if $str ends with $sub function endsWith($str, $sub) { return substr($str, strlen($str) - strlen($sub)) == $sub; } ?\>

kleine Korrektur, der Zeilenumbruch muss nätürlich mittels

echo "
" anstelle von echo „\n“ erfolgen.

Bin etwas C und Java belastet :wink:

Hallo spamnotpermitted,

vielen Dank für deine Antwort.

Du musst eigentlich nur durch das Array iterieren (z.B.
mittels einer foreach-Schleife) und die einzelnen Werte
ausgeben. Vor der Ausgabe jedes Arrayelements überprüfst du ob
sich die Dateiendung geändert hat und im Fall dass dies
zutrifft, gibst du die Überschrift aus.

So wollte ich es auch machen. Allerdings hat mir die Überprüfung, ob sich die Dateiendung geändert hat, Schwierigkeiten bereitet. Wenn man zum Beispiel mit einer for-Schleife arbeitet und $arr[i] mit $arr[i+1] bzw. $arr[i] mit $arr[i-1] vergleicht, hat man beim letzten bzw. ersten Element ein Problem.

Müsste also irgendwas in die Richtung sein (ACHTUNG!!!
ungetestet, nur schnell runter getippt):

<?php :
$arr = array ( [0] =\> a.doc [1] =\> b.doc [2] =\> c.doc [3] =\> a.ppt [4] =\> b.ppt [5] =\> c.ppt [6] =\> a.xls [7] =\> b.xls [8] =\> c.xls ) $fileExtension = null; foreach ($arr as $value) { if (fileExtension == null || !endsWith($value, fileExtension)) { if (fileExtension != null) { echo "\n"; } fileExtension = substr(value, strrpos($value, ".") + 1); echo fileExtension.":"; } echo $value; } // return true if $str ends with $sub function endsWith($str, $sub) { return substr($str, strlen($str) - strlen($sub)) == $sub; } ?\>

Vielen Dank! :smile:

Liebe Grüße
Hugo

kleine Korrektur, der Zeilenumbruch muss nätürlich mittels

echo "
" anstelle von echo „\n“ erfolgen.

Bin etwas C und Java belastet :wink:

Das sind ja nur Formatierungsdetails. :smile:

Es liegt ein bereits sortiertes Array vor, zum Beispiel:

Array (
[0] => a.doc
[1] => b.doc
[2] => c.doc
[3] => a.ppt
[4] => b.ppt
[5] => c.ppt
[6] => a.xls
[7] => b.xls
[8] => c.xls
)

Die Ausgabe soll so aussehen:

doc:
a.doc
b.doc
c.doc

ppt:
a.ppt
b.ppt
c.ppt

xls:
a.xls
b.xls
c.xls

Wie stelle ich das an?

die teillisten wuerde ich mit http://php.net/preg_grep erstellen

$doc = preg\_grep('/\.doc$/',$deineListe);

Hallo Jörg,

danke für deine Antwort.

die teillisten wuerde ich mit http://php.net/preg_grep
erstellen

$doc = preg_grep(’/.doc$/’,$deineListe);

Das macht aber doch eigentlich nur Sinn, wenn kein bereits sortiertes Array vorliegt, oder?

Liebe Grüße
Hugo

Hallo Jörg,

danke für deine Antwort.

die teillisten wuerde ich mit http://php.net/preg_grep
erstellen

$doc = preg_grep(’/.doc$/’,$deineListe);

Das macht aber doch eigentlich nur Sinn, wenn kein bereits
sortiertes Array vorliegt, oder?

mmn kommst du viel einfacher an deine unterlisten und kannst damit ein uebersichtlicheres konstrukt schreiben,

mmn kommst du viel einfacher an deine unterlisten und kannst
damit ein uebersichtlicheres konstrukt schreiben,

Mir kommt es ineffizient vor, weil das bereits sortierte Array für jeden Dateitypen noch mal vollständig durchlaufen werden muss. Zudem müssen die verschiedenen im Array vorkommenden Dateitypen bei dieser Methode bekannt sein, oder irre ich mich?

Moin

Mir kommt es ineffizient vor, weil das bereits sortierte Array
für jeden Dateitypen noch mal vollständig durchlaufen werden
muss. Zudem müssen die verschiedenen im Array vorkommenden
Dateitypen bei dieser Methode bekannt sein, oder irre ich
mich?

warum machst du das auch so,
wenn du nichts durchlaufen willst, dann als
Assoziatives array

$a[‚doc‘] = array(‚datei‘,‚datei‘);

inneffizient ist die vorlage , nicht das verarbeiten der werte .

warum machst du das auch so,
wenn du nichts durchlaufen willst, dann als
Assoziatives array

$a[‚doc‘] = array(‚datei‘,‚datei‘);

inneffizient ist die vorlage , nicht das verarbeiten der werte

Wie gesagt, das sortierte Array liegt bereits vor. Wäre es nicht sortiert und würde ich preg_grep nutzen, lägen die Dateien in den Ergebnis-Arrays nicht zwangsläufig in alphabetischer Reihenfolge vor.

Wie kann eine Vorlage ineffizient sein? Sie ist doch allenfalls ungeeignet für eine bestimmte Form der Verarbeitung.

Moin moin ,

Wie kann eine Vorlage ineffizient sein? Sie ist doch

ich versteh dein ding auch nicht, was ist dein problem , liegen daten in reihen vor geht man sie reihenweise durch , oder sind wir bei optimierten code weil dir der bisherige nicht gefällt ?

allenfalls ungeeignet für eine bestimmte Form der
Verarbeitung.

Genau also nix mit ineffizient , verarbeiten und gut.

ich versteh dein ding auch nicht, was ist dein problem ,
liegen daten in reihen vor geht man sie reihenweise durch ,
oder sind wir bei optimierten code weil dir der bisherige
nicht gefällt ?

Es ging doch darum, ob die Verwendung von preg_grep hier Sinn macht.