multiarray's omzetten naar enklvoudige arrays
Ik heb i.v.m. het opzetten van een grafiek 3 arrays nodig.
Ik heb 2 gevulde multiarrays.
Met de volgende 2 regels maak ik de 2 multiarrays:
Code (php)
1
2
2
$journaalposten_debet_arr[] = array($journaalposten_datum, $journaalposten_debet_bedrag);
$journaalposten_credit_arr[] = array($journaalposten_datum, $journaalposten_credit_bedrag);
$journaalposten_credit_arr[] = array($journaalposten_datum, $journaalposten_credit_bedrag);
Ik maak een eerste enkelvoudige array met de volgende code:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
for ($date = strtotime($array1[2] . '-' . $array1[1] . '-' . $array1[0]);
$date <= strtotime($array2[2] . '-' . $array2[1] . '-' . $array2[0]);
$date = strtotime("+1 day", $date))
{
$date_vergelijken = date('Y-m-d', $date);
$datum_arr[] = array($date_vergelijken);
}
$date <= strtotime($array2[2] . '-' . $array2[1] . '-' . $array2[0]);
$date = strtotime("+1 day", $date))
{
$date_vergelijken = date('Y-m-d', $date);
$datum_arr[] = array($date_vergelijken);
}
Deze vormt een array met alle dagen die in de grafiek genoemd moeten worden. Ook de dagen die niet in de 2 multiarrays voorkomen.
Ik wil de andere 2 enkelvoudige arrays $debet_arr en $credit_arr noemen.
De volgoorde moet het zelfde zijn als $datum_arr
Ze moeten gevuld worden met de bedragen. Maar is er in de muliarray een dag niet, dan moet er een bedrag 0 worden ingevuld.
$journaalposten_debet_arr is bijvoorbeeld als volgt gevuld:
Dan ziet $journaalposten_credit_arr er bijvoorbeeld als volgt uit:
$datum_arr heeft dan dus alledagen van 2-11-2018 t/m 8-11-2018. Dus ook 3-11-2018, 4-11-2018 en 6-11-2018
$debet_arr ziet er dan als volgt uit:
25, 0, 0, 0, 0, 0
$credit_arr ziet er dan zo uit:
0, 0, 0, 30, 0, 15
Alleen hoe ik dit voor elkaar moet krijgen weet ik nu even niet.
Misschien is er iemand die me hier in een tip kan geven.
Alvast bedankt,
Frits van Leeuwen
Gewijzigd op 04/11/2018 00:45:16 door Frits van Leeuwen
2-11-2018 => 25,
5-11-2018 => 0,
et cetera.
Als je nu zorgt dat alle datums hetzelfde formaat hebben dan kun je de datums waarin je geinteresseerd bent aflopen en dan controleren of deze als key bestaat in $journaalposten_debet_arr. Zoja, pak bijbehorende waarde, zonee, vul hier het cijfer nul voor in.
Een herorganisatie van je input-arrays zal dit alles een stuk makkelijker maken.
Ik denk dat ik toch niet helemaal duidelijk was.
De bestaande arrays heb ik datums en bedragen. Maar de datum die er nog tussen horen moeten een bedrag van 0 krijgen.
En ik wil 3 arrays hiervan maken. Namelijk één met alle dagen (Die lukt wel zoals je ziet) en nog 2 met alleen bedragen. Die bedragen moet in de juiste volgorde geplaatst worden, zodat ze naast de datum tabel het juiste bedrag hebben.
Dan, als je door dat andere array heenrent waar je alle datums in hebt staan kun je controleren of de datum-key bestaat in het debet/credit array en daarbij direct het bedrag ophoesten, en daar anders 0 invullen. Je gebruikt dus het datum-array als leidraad voor het bouwen van een nieuw array, bijvoorbeeld als volgt:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
// https://www.phphulp.nl/php/forum/topic/multiarrays-omzetten-naar-enklvoudige-arrays/102522/last/
$debet = array(
'2018-10-30' => 50,
'2018-10-31' => 20,
'2018-11-02' => 25,
);
$credit = array(
'2018-11-01' => 35,
'2018-11-02' => 20,
'2018-11-03' => 10,
);
// alle datums van interesse
// deze zou je ook op kunnen bouwen adhv $debet en $credit en sorteren met een sorteerfunctie
$allDates = array(
'2018-10-30',
'2018-10-31',
'2018-11-01',
'2018-11-02',
'2018-11-03',
);
// array uitvullen met nulwaarden
$debetNew = array();
foreach ($allDates as $date) {
if (isset($debet[$date])) {
$debetNew[$date] = $debet[$date];
} else {
$debetNew[$date] = 0;
}
}
// zo ook voor $credit
// dump info
echo '<pre>'.print_r($debetNew, true).'</pre>';
?>
// https://www.phphulp.nl/php/forum/topic/multiarrays-omzetten-naar-enklvoudige-arrays/102522/last/
$debet = array(
'2018-10-30' => 50,
'2018-10-31' => 20,
'2018-11-02' => 25,
);
$credit = array(
'2018-11-01' => 35,
'2018-11-02' => 20,
'2018-11-03' => 10,
);
// alle datums van interesse
// deze zou je ook op kunnen bouwen adhv $debet en $credit en sorteren met een sorteerfunctie
$allDates = array(
'2018-10-30',
'2018-10-31',
'2018-11-01',
'2018-11-02',
'2018-11-03',
);
// array uitvullen met nulwaarden
$debetNew = array();
foreach ($allDates as $date) {
if (isset($debet[$date])) {
$debetNew[$date] = $debet[$date];
} else {
$debetNew[$date] = 0;
}
}
// zo ook voor $credit
// dump info
echo '<pre>'.print_r($debetNew, true).'</pre>';
?>
Hierbij doe ik wel de aanname waarbij elke datum maar één debet of credit bedrag heeft.
En als je alles gescheiden wilt houden bij het bouwen van $debetNew als dat makkelijker is voor het vullen van je grafiek dan kan dat natuurlijk ook, dan wordt regel 28 t/m 32 zoiets als:
Ik heb hiermee voldoende geholpen. In de eerste reactie stond: "Een herorganisatie van je input-arrays zal dit alles een stuk makkelijker maken."
Ik heb daar naar gekeken. Ik vond een methode om ze allemaal als enkelvoudige array aan te leveren. Daardoor wordt het makkelijker om het om te vormen naar wat ik hebben wil. Hiermee moet het lukken.
Bedankt.