Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.php > #4317 > unrolled thread

Array sort

Started byJan Novak <repcom@gmail.com>
First post2017-12-29 08:52 +0100
Last post2017-12-31 14:23 +0100
Articles 6 — 3 participants

Back to article view | Back to de.comp.lang.php


Contents

  Array sort Jan Novak <repcom@gmail.com> - 2017-12-29 08:52 +0100
    Re: Array sort Gerome Muent <kontakt@bmservices.de> - 2017-12-29 10:07 +0100
      Re: Array sort Jan Novak <repcom@gmail.com> - 2017-12-29 15:32 +0100
        Re: Array sort "Christoph M. Becker" <cmbecker69@arcor.de> - 2017-12-29 17:40 +0100
          Re: Array sort Jan Novak <repcom@gmail.com> - 2017-12-31 13:28 +0100
            Re: Array sort "Christoph M. Becker" <cmbecker69@arcor.de> - 2017-12-31 14:23 +0100

#4317 — Array sort

FromJan Novak <repcom@gmail.com>
Date2017-12-29 08:52 +0100
SubjectArray sort
Message-ID<p24s8n$tg7$1@news.albasani.net>
Hallo,

ich habe folgendes Array:

array(25) {
[0]=> array(2) { ["FILE"]=> string(12) "scan0011.pdf" ["PREVIEW"]=> 
string(27) "scan0011_owndms_preview.jpg" }
[1]=> array(2) { ["FILE"]=> string(12) "scan0016.pdf" ["PREVIEW"]=> 
string(27) "scan0016_owndms_preview.jpg" }
[2]=> array(2) { ["FILE"]=> string(12) "scan0007.pdf" ["PREVIEW"]=> 
string(27) "scan0007_owndms_preview.jpg" }
...
}

und möchte es nach dem Key "FILE" sortieren, ohne die Key/Values zu 
brechen. Ich habe alle möglichen PHP Funktionen versucht, aber es kommt 
immer "1" zurück!?

Jan

[toc] | [next] | [standalone]


#4318

FromGerome Muent <kontakt@bmservices.de>
Date2017-12-29 10:07 +0100
Message-ID<p250kq$h23$1@news.albasani.net>
In reply to#4317
Am 29.12.2017 um 08:52 schrieb Jan Novak:


> array(25) {
> [0]=> array(2) { ["FILE"]=> string(12) "scan0011.pdf" ["PREVIEW"]=> 
> string(27) "scan0011_owndms_preview.jpg" }
> [1]=> array(2) { ["FILE"]=> string(12) "scan0016.pdf" ["PREVIEW"]=> 
> string(27) "scan0016_owndms_preview.jpg" }
> [2]=> array(2) { ["FILE"]=> string(12) "scan0007.pdf" ["PREVIEW"]=> 
> string(27) "scan0007_owndms_preview.jpg" }
> ...
> }

Am einfachsten wäre, wenn du die Datenstruktur so veränderst:
 > array(25) {
 > ["scan0011.pdf"]=> array(2) { ["FILE"]=> string(12) "scan0011.pdf" 
["PREVIEW"]=>
 > string(27) "scan0011_owndms_preview.jpg" }
 > ["scan0016.pdf"]=> array(2) { ["FILE"]=> string(12) "scan0016.pdf" 
["PREVIEW"]=>
 > string(27) "scan0016_owndms_preview.jpg" }
 > ["scan0007.pdf"]=> array(2) { ["FILE"]=> string(12) "scan0007.pdf" 
["PREVIEW"]=>
 > string(27) "scan0007_owndms_preview.jpg" }
 > ...
 > }

Sprich, statt der laufenden Indizes den zu sortierenden Index verwenden.

Und dann kannst du einfach nach dem Key sortieren:
ksort($...);

http://php.net/manual/de/function.ksort.php

 > und möchte es nach dem Key "FILE" sortieren, ohne die Key/Values zu
 > brechen. Ich habe alle möglichen PHP Funktionen versucht, aber es kommt
 > immer "1" zurück!?

Das sortiert das Array selber, Rückgabe ist TRUE oder FALSE!

Ansonsten irgendeine Variante von 
http://php.net/manual/de/function.array-multisort.php

Aber auch das sortiert das übergebene Array. Rückgabe ist auch da immer 
TRUE oder FALSE.

Grüße, Gérôme






> 
> Jan

[toc] | [prev] | [next] | [standalone]


#4319

FromJan Novak <repcom@gmail.com>
Date2017-12-29 15:32 +0100
Message-ID<p25jl9$ttd$1@news.albasani.net>
In reply to#4318
Am 29.12.2017 um 10:07 schrieb Gerome Muent:
> Am 29.12.2017 um 08:52 schrieb Jan Novak:
> 
> 
>> array(25) {
>> [0]=> array(2) { ["FILE"]=> string(12) "scan0011.pdf" ["PREVIEW"]=> 
>> string(27) "scan0011_owndms_preview.jpg" }
>> [1]=> array(2) { ["FILE"]=> string(12) "scan0016.pdf" ["PREVIEW"]=> 
>> string(27) "scan0016_owndms_preview.jpg" }
>> [2]=> array(2) { ["FILE"]=> string(12) "scan0007.pdf" ["PREVIEW"]=> 
>> string(27) "scan0007_owndms_preview.jpg" }
>> ...
>> }
> 
> Am einfachsten wäre, wenn du die Datenstruktur so veränderst:
>  > array(25) {
>  > ["scan0011.pdf"]=> array(2) { ["FILE"]=> string(12) "scan0011.pdf" 
> ["PREVIEW"]=>
>  > string(27) "scan0011_owndms_preview.jpg" }
>  > ["scan0016.pdf"]=> array(2) { ["FILE"]=> string(12) "scan0016.pdf" 
> ["PREVIEW"]=>
>  > string(27) "scan0016_owndms_preview.jpg" }
>  > ["scan0007.pdf"]=> array(2) { ["FILE"]=> string(12) "scan0007.pdf" 
> ["PREVIEW"]=>
>  > string(27) "scan0007_owndms_preview.jpg" }
>  > ...
>  > }
> 
> Sprich, statt der laufenden Indizes den zu sortierenden Index verwenden.

Haben ich gemacht!

> Aber auch das sortiert das übergebene Array. Rückgabe ist auch da immer 
> TRUE oder FALSE.


(Hand auf die Stirn Klopf) ooohhhh .... ;-)

Danke !!!

Jan

[toc] | [prev] | [next] | [standalone]


#4320

From"Christoph M. Becker" <cmbecker69@arcor.de>
Date2017-12-29 17:40 +0100
Message-ID<p25r6q$8os$1@solani.org>
In reply to#4319
Am 29.12.2017 um 15:32 schrieb Jan Novak:

> Am 29.12.2017 um 10:07 schrieb Gerome Muent:
>
>> Am 29.12.2017 um 08:52 schrieb Jan Novak:
>>
>>> array(25) {
>>> [0]=> array(2) { ["FILE"]=> string(12) "scan0011.pdf" ["PREVIEW"]=>
>>> string(27) "scan0011_owndms_preview.jpg" }
>>> [1]=> array(2) { ["FILE"]=> string(12) "scan0016.pdf" ["PREVIEW"]=>
>>> string(27) "scan0016_owndms_preview.jpg" }
>>> [2]=> array(2) { ["FILE"]=> string(12) "scan0007.pdf" ["PREVIEW"]=>
>>> string(27) "scan0007_owndms_preview.jpg" }
>>> ...
>>> }
>>
>> Am einfachsten wäre, wenn du die Datenstruktur so veränderst:
>>  > array(25) {
>>  > ["scan0011.pdf"]=> array(2) { ["FILE"]=> string(12) "scan0011.pdf"
>> ["PREVIEW"]=>
>>  > string(27) "scan0011_owndms_preview.jpg" }
>>  > ["scan0016.pdf"]=> array(2) { ["FILE"]=> string(12) "scan0016.pdf"
>> ["PREVIEW"]=>
>>  > string(27) "scan0016_owndms_preview.jpg" }
>>  > ["scan0007.pdf"]=> array(2) { ["FILE"]=> string(12) "scan0007.pdf"
>> ["PREVIEW"]=>
>>  > string(27) "scan0007_owndms_preview.jpg" }
>>  > ...
>>  > }
>>
>> Sprich, statt der laufenden Indizes den zu sortierenden Index verwenden.
> 
> Haben ich gemacht!

Mögliche Alternative:

  usort($array, function ($a, $b) {return $a['FILE'] <=> $b['FILE'];});

-- 
Christoph M. Becker

[toc] | [prev] | [next] | [standalone]


#4321

FromJan Novak <repcom@gmail.com>
Date2017-12-31 13:28 +0100
Message-ID<p2al59$avj$1@news.albasani.net>
In reply to#4320
Am 29.12.2017 um 17:40 schrieb Christoph M. Becker:
>>>> array(25) {
>>>> [0]=> array(2) { ["FILE"]=> string(12) "scan0011.pdf" ["PREVIEW"]=>
>>>> string(27) "scan0011_owndms_preview.jpg" }
>>>> [1]=> array(2) { ["FILE"]=> string(12) "scan0016.pdf" ["PREVIEW"]=>
>>>> string(27) "scan0016_owndms_preview.jpg" }
>>>> [2]=> array(2) { ["FILE"]=> string(12) "scan0007.pdf" ["PREVIEW"]=>
>>>> string(27) "scan0007_owndms_preview.jpg" }
>>>> ...
>>>> }
>>>
>>> Am einfachsten wäre, wenn du die Datenstruktur so veränderst:
>>>   > array(25) {
>>>   > ["scan0011.pdf"]=> array(2) { ["FILE"]=> string(12) "scan0011.pdf"
>>> ["PREVIEW"]=>
>>>   > string(27) "scan0011_owndms_preview.jpg" }
>>>   > ["scan0016.pdf"]=> array(2) { ["FILE"]=> string(12) "scan0016.pdf"
>>> ["PREVIEW"]=>
>>>   > string(27) "scan0016_owndms_preview.jpg" }
>>>   > ["scan0007.pdf"]=> array(2) { ["FILE"]=> string(12) "scan0007.pdf"
>>> ["PREVIEW"]=>
>>>   > string(27) "scan0007_owndms_preview.jpg" }
>>>   > ...
>>>   > }
>>>
>>> Sprich, statt der laufenden Indizes den zu sortierenden Index verwenden.
>>
>> Haben ich gemacht!

> 
> Mögliche Alternative:
> 
>    usort($array, function ($a, $b) {return $a['FILE'] <=> $b['FILE'];});


Interessant...

Mein primäres Problem war, dass ich dachte, die *sort Funktionen geben 
das sortierte Array zurück ;-)

Jan

[toc] | [prev] | [next] | [standalone]


#4322

From"Christoph M. Becker" <cmbecker69@arcor.de>
Date2017-12-31 14:23 +0100
Message-ID<p2aocn$dbh$1@solani.org>
In reply to#4321
Am 31.12.2017 um 13:28 schrieb Jan Novak:
>
> Am 29.12.2017 um 17:40 schrieb Christoph M. Becker:
>
>> Mögliche Alternative:
>>
>>    usort($array, function ($a, $b) {return $a['FILE'] <=> $b['FILE'];});
> 
> Interessant...
> 
> Mein primäres Problem war, dass ich dachte, die *sort Funktionen geben
> das sortierte Array zurück ;-)

Aus Effizienzgründen werden die per Referenz übergebenen Arrays in-place
sortiert. Will man das, aus welchen Gründen auch immer, nicht, dann kann
man leicht eine eigene Sortierfunktion schreiben, die das übergebene
Array unverändert lässt, und das sortierte Array zurück gibt. Etwa:

    <?php

    function my_sort($array)
    {
        $a = $array;
        sort($a);
        return $a;
    }

    $a = [2, 3, 1];
    var_dump($a, my_sort($a));

-- 
Christoph M. Becker

[toc] | [prev] | [standalone]


Back to top | Article view | de.comp.lang.php


csiph-web