multiarray's omzetten naar enklvoudige arrays

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Frits van Leeuwen

Frits van Leeuwen

04/11/2018 00:38:16
Quote Anchor link
Hallo allemaal,
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)
PHP script in nieuw venster Selecteer het PHP script
1
2
        $journaalposten_debet_arr[] = array($journaalposten_datum, $journaalposten_debet_bedrag);
        $journaalposten_credit_arr[] = array($journaalposten_datum, $journaalposten_credit_bedrag);


Ik maak een eerste enkelvoudige array met de volgende code:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);
        
        }


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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
2-11-2018 25
5-11-2018 0
7-11-2018 0


Dan ziet $journaalposten_credit_arr er bijvoorbeeld als volgt uit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
2-11-2018 0
5-11-2018 30
7-11-2018 15


$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
 
PHP hulp

PHP hulp

28/03/2024 14:44:13
 
Thomas van den Heuvel

Thomas van den Heuvel

04/11/2018 02:06:53
Quote Anchor link
Nu zitten de datums en bijbehorende waarden van de twee arrays in aparte subarrays, maar als datums uniek zijn dan kun je deze opslaan als key => value paren. $journaalposten_debet_arr wordt dan bijvoorbeeld:
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.
 
Frits van Leeuwen

Frits van Leeuwen

04/11/2018 13:12:07
Quote Anchor link
Bedankt voor het antwoord.

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.
 
Thomas van den Heuvel

Thomas van den Heuvel

04/11/2018 14:14:37
Quote Anchor link
We zeggen denk ik allebei hetzelfde. Op dit moment is er echter geen verband tussen de datums en bedragen in de debet en credit arrays. Ik bedoel hoe bepaal je op welke datum bedrag nummer drie thuishoort? Dat is dan de datum op de derde positie lijkt mij? Door deze samen te voegen waarbij je een "mapping" of functie hebt van datum => bedrag heb je direct het bedrag op datum.

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>';
?>

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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
    if (isset($debet[$date])) {
        $debetNew[0][] = $date; // de datum
        $debetNew[1][] = $debet[$date]; // het bedrag
    } else {
        $debetNew[0][] = $date; // de datum
        $debetNew[1][] = 0; // geen bedrag op deze datum
    }
?>
 
Frits van Leeuwen

Frits van Leeuwen

04/11/2018 15:57:41
Quote Anchor link
Hartelijk dank.

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.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.