Jörg Reinholz: Spielzeug ...

Beitrag lesen

Moin!

<?php

# Simulation Datenbank:
$ar[1]=1;
$ar[2]=2;
$ar[3]=2;
$ar[4]=1;
$ar[5]=9;
#$ar[6]=0;
$ar[7]=3;
#$ar[8]=0;
#$ar[9]=0;
$ar[10]=4;
$ar[11]=3;
#$ar[12]=0;

$a[2015]=$ar;

$Jahr_min = 2015;
$Jahr_max = 2015;

# Auffüllen der Monate

for ( $Jahr=$Jahr_min; $Jahr<=$Jahr_max;$Jahr++ ) {
    #für jeden Monat:
    for ($Monat=1; $Monat <= 12; $Monat++) {
        if ( empty( $ar[$Monat])) { $ar[$Monat] = 0; }
        $a[$Jahr][$Monat-1]=$ar[$Monat];
    }
}

#Erzeugen des JSON-Strings:
echo json_encode($a, JSON_NUMERIC_CHECK | JSON_PRETTY_PRINT);
echo "\n";


#Erzeugen des JSON-Strings - manuell:
$Jahr=2015;
#für jeden Monat:
$s = "{\n\"" . $Jahr . '":[';

for ($Monat=0; $Monat < 12; $Monat++) {
    $s .= $a[$Jahr][$Monat];
    if ( 11 != $Monat ) {
        $s .= ',';
    }
}
$s .= "]\n}";
echo $s;
echo "\n";

Man kann sich, wie Cheatah vor Jahren hier schon einmal anmerkte, auf die Reihenfolge der Elemente eines Arrays nicht wirklich verlassen. (Auf die Indizes aber schon...) Der mit json_encode erzeugte String sieht zwar optisch nicht so aus wie Dein JSON:

{
    "2015": {
        "1": 1,
        "2": 2,
        "3": 2,
        "4": 1,
        "5": 9,
        "7": 3,
        "10": 4,
        "11": 3,
        "6": 0,
        "8": 0,
        "9": 0,
        "12": 0
    }
}

hat aber praktisch den gleichen Inhalt. Ansonsten kann man manuell einen String basteln...

{
"2015":[1,2,2,1,9,0,3,0,0,4,3,0]
}

Jörg Reinholz