par
Marc_Q » 06 mars 2021, 12:34
Salut, je ferais une simple boucle for $i = 0; $i < 12; $i++ :
$datastatPrivInvProsp = $statPrivInvProsp->toArray();
for ($i = 0; $i < 12; $i++)
if (!isset($datastatPrivInvProsp[$i]))
$datastatPrivInvProsp[$i] = [ 'total' => 0, 'month' => $i + 1 ];
PS : je vois que ça colle pas tout à fait. Du coup la vite fait, je construirais un nouveau tableau avec une première boucle sur le résultat en indexant ce tableau par rapport au mois et ensuite la boucle du dessus, genre :
$chartData = [];
foreach ($statPrivInvProsp->toArray() as $data)
$chartData[$data['month'] - 1] = $data;
for ($i = 0; $i < 12; $i++)
if (!isset($chartData[$i]))
$chartData[$i] = [ 'total' => 0, 'month' => $i + 1 ];
Salut Saian,
Grand merci pour ton retour. Il me retourne bien les données dans le format initialement demandées.
Je me suis par contre trompe dans le format.
En l'occurrence, chartsjs doit recevoir des données pour les axes X et Y. Ce qui impacte le format. Désolé pour ce changement.
Les données devrait être restituées sous cette forme plus complexe :
Code : Tout sélectionner
array:12 [▼
"label" => array:12 [▼
0 => 1
1 => 2
2 => 3
3 => 4
4 => 5
5 => 6
6 => 7
7 => 8
8 => 9
9 => 10
10 => 11
11 => 12
]
"data" => array:12 [▼
0 => 2
1 => 0
3 => 1
3 => 0
4 => 0
5 => 0
6 => 0
7 => 0
8 => 0
9 => 0
10 => 0
11 => 0
]
"chart_data" => "{"label":[1,2,3,4,5,6,7,8,9,10,11,12],"data":[2,0,1,0,0,0,0,0,0,0]}"
]
Les mois manquants devraient également être retournés
et pour finir, ce qui serait plus lisible pour le user, les labels devraient être remplacés par :
[JAN, FEV, MARS, AVRIL, MAI, JUIN, JUIL, AOUT, SEPT, OCT, NOV, DEC] au lieu de [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] .
Ce serait chouette si tu avais le temps de me donner un coup de main, car si j'ai compris la logique de ta première proposition de code, là je vois encore moins comment faire.
Merci.
[quote=Saian post_id=466394 time=1614952579 user_id=20262]
Salut, je ferais une simple boucle for $i = 0; $i < 12; $i++ :
[PHP]$datastatPrivInvProsp = $statPrivInvProsp->toArray();
for ($i = 0; $i < 12; $i++)
if (!isset($datastatPrivInvProsp[$i]))
$datastatPrivInvProsp[$i] = [ 'total' => 0, 'month' => $i + 1 ];[/PHP]
PS : je vois que ça colle pas tout à fait. Du coup la vite fait, je construirais un nouveau tableau avec une première boucle sur le résultat en indexant ce tableau par rapport au mois et ensuite la boucle du dessus, genre :
[PHP]$chartData = [];
foreach ($statPrivInvProsp->toArray() as $data)
$chartData[$data['month'] - 1] = $data;
for ($i = 0; $i < 12; $i++)
if (!isset($chartData[$i]))
$chartData[$i] = [ 'total' => 0, 'month' => $i + 1 ];[/PHP]
[/quote]
Salut Saian,
Grand merci pour ton retour. Il me retourne bien les données dans le format initialement demandées.
Je me suis par contre trompe dans le format.
En l'occurrence, chartsjs doit recevoir des données pour les axes X et Y. Ce qui impacte le format. Désolé pour ce changement.
Les données devrait être restituées sous cette forme plus complexe :
[code]
array:12 [▼
"label" => array:12 [▼
0 => 1
1 => 2
2 => 3
3 => 4
4 => 5
5 => 6
6 => 7
7 => 8
8 => 9
9 => 10
10 => 11
11 => 12
]
"data" => array:12 [▼
0 => 2
1 => 0
3 => 1
3 => 0
4 => 0
5 => 0
6 => 0
7 => 0
8 => 0
9 => 0
10 => 0
11 => 0
]
"chart_data" => "{"label":[1,2,3,4,5,6,7,8,9,10,11,12],"data":[2,0,1,0,0,0,0,0,0,0]}"
]
[/code]
Les mois manquants devraient également être retournés
et pour finir, ce qui serait plus lisible pour le user, les labels devraient être remplacés par :
[JAN, FEV, MARS, AVRIL, MAI, JUIN, JUIL, AOUT, SEPT, OCT, NOV, DEC] au lieu de [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] .
Ce serait chouette si tu avais le temps de me donner un coup de main, car si j'ai compris la logique de ta première proposition de code, là je vois encore moins comment faire.
Merci.