Jörg Reinholz: Array sortieren und counten

Beitrag lesen

Array
(
     [1] => stdClass Object
        (
            [datum] => 16.10.2012
            [id] => 50101776
        )
    [2] => stdClass Object
        (
            [datum] => 19.05.2012
            [id] => 50110056
        )
    [3] => stdClass Object
        (
            [datum] => 02.03.2012
            [id] => 50110197
        )
    [4] => stdClass Object
        (
            [datum] => 19.05.2012
            [id] => 50112834
        )
)


>   
> Ich suche nun nach einer eleganten Methode das Array nach dem Datum zu sortieren und gleichzeitig Objekte mit gleichem Datum (hier z.b. [2] und [4] ) zusammenzufassen:  
>   
> am Besten wäre als Ziel array sowas:  
> ~~~html
  

>   
> Array  
> (  
>      [1] => stdClass Object  
>         (  
>             [datum] => 02.03.2012  
>             [count] => 1  
>         )  
>   
>      [2] => stdClass Object  
>         (  
>             [datum] => 19.05.2012  
>             [count] => 2  
>         )  
>      [3] => stdClass Object  
>         (  
>             [datum] => 16.10.2012  
>             [count] => 1  
>         )  
> )  
>   
> 

Das sieht nicht brauchbar aus. Wer macht oder will denn macht sowas?

$arTermine=array();  
foreach ($data as $ar) {  
  
    // brauchbares Datumsformat herstellen:  
    list($d, $m, $y)=explode('.', $ar['datum']);  
    $datum="$y-$m-$d";  
  
    // umfummeln  
    if (! isset $arTermine[$datum]) {  
        $arTermine[$datum]=1;  
    } else {  
        $arTermine[$datum]++;  
    }  
    //sortieren:  
    ksort ($arTermine);  
}  

Fehlerchen vorbehalten.

$arTermine sollte jetzt enthalten was Du suchst. Sieht dann so aus:
$arTermine
Array (
  [2012-03-02] => 1
  [2012-15-19] => 2
  [2012-10-16] => 1
)

Du bekommst also ein bequem zu händelndes, schön flaches assoziatives Array. An die Werte kommst Du mit array_keys(), foreach und so weiter.

Die Ausgabe des Datums mache mit etwas wie:

<?php  
function getMyGermanDatum($isoDatum) {  
    return date_format(date_create($isoDatum), 'd.m.Y');  
}  
?>

Jörg Reinholz