Datums per maand samenvoegen in array

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Christiaan de kleine

christiaan de kleine

27/04/2023 19:12:18
Quote Anchor link
Hallo allemaal,

Ben bezig met een projectje om een jaarplanning zichtbaar te maken.

De output komt als volgt:

|Maand|Activiteiten|
|JANUARI|activiteiten in januari (1 per regel) (opmaak: 14 - naam activiteit)|
|FEBRUARI|activiteiten in februari)
...
|DECEMBER|activiteiten in december|

Nu haal ik mijn activiteiten, datums, tijden, locatie allemaal op vanuit mijn database.
datum = als date (yyyy-mm-dd)
alle andere velden zijn hard coded ingevoerd.

Dit wordt voor nu allemaal opgehaald met een sql query zodat alle gegevens vanaf vandaag tot en met toekomst in een array genaamd data zitten.

Hoe kan ik er voor zorgen dat het per maand in een eigen array komt.
dus alle activiteiten van januari in dataJanuari
alle activiteiten van februari in dataFebruari

Het enige punt is dat er bijvoorbeeld 10 activiteiten gepland kunnen zijn in Januari,
0 in februari
3 in maart
2 in april

Kan iemand mij op weg helpen misschien?

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
$query = "SELECT `calendar_id`, DATE_FORMAT(datum, \"%d-%M-%Y\") AS formatted_date, `tijd`, `titel`, `locatie`, `aanvullende_info`, `wie` FROM `planning` WHERE `app_id` LIKE '$appID' AND `published` = '1' AND `platform` LIKE '%app%' AND `datum` >= '$today' ORDER by datum ASC";

$db->query("SET lc_time_names = 'nl_NL'");
$result = $db->query($query);


if ($result->num_rows > 0) {
    // output data of each row
    $numRowsGetField = $result->num_rows;
    $data[] = $numRowsGetField;
    $data[] = ($numRowsGetField*5)+1;
    while($row = $result->fetch_assoc()) {
        //$fieldStaf1 = $row["staf1"];
        $data[] = $row["calendar_id"];
        $data[] = $row["formatted_date"];
        $data[] = change_month($row["formatted_date"]);
        $data[] = $row["tijd"];
        $data[] = $row["titel"];
        $data[] = $row["locatie"];
        $data[] = $row["aanvullende_info"];
        $data[] = $row["wie"];
    }
} else {
    echo "#Error: " . $query . "<br>" . $db->error."#";
}


Bovenstaand de php sql code die functioneerd waardoor dus mijn data array gevuld wordt met alle resultaten.

Ben ervan bewust dat het misschien wat lekken in zitten, en de code misschien niet zo heel veilig is.
 
PHP hulp

PHP hulp

02/03/2024 08:41:33
 
Ivo P

Ivo P

27/04/2023 19:58:32
Quote Anchor link
ik zou de datum sowieso ook in het formaat Y-m-d ophalen

maar het kan ook handig zijn om maand en jaar apart op te halen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
SELECT `calendar_id`,
DATE_FORMAT(datum, \"%d-%M-%Y\") AS formatted_date,
`tijd`, `titel`, `locatie`, `aanvullende_info`, `wie`  
, DATE_FORMAT(datum, '%Y%m') AS jaarmaand

FROM `planning`
 WHERE `app_id` LIKE '$appID' AND `published` = '1'
 AND `platform` LIKE '%app%' AND
`datum` >= CURRENT_DATE
ORDER by datum ASC, tijd ASC;


daarna loop je door deze resultaten waarbij je oplet of de kolom jaarmaand een nieuwe waarde krijgt.

let op dat je dus resultaten uit meerdere jaren kunt hebben
Gewijzigd op 27/04/2023 19:59:17 door Ivo P
 
Christiaan de kleine

christiaan de kleine

27/04/2023 20:15:04
Quote Anchor link
De reden dat ik de datum ombouw naar dd-mm-yyyy is omdat ik het anders toch weer omzet naar dat formaat ivm de functie die ik gebruik ten gebruik van de datum veld.

Quote:
daarna loop je door deze resultaten waarbij je oplet of de kolom jaarmaand een nieuwe waarde krijgt.

let op dat je dus resultaten uit meerdere jaren kunt hebben


Kan je me misschien hier helpen qua opzet. Weet even niet hoe ik dit het beste kan oppakken namelijk.

Want ja, de activiteiten komen binnen tussen op meerdere jaren... en die moeten dan ook getoond worden.

Toevoeging op 27/04/2023 22:28:02:

Ik ben aan het stoeien, weet niet of ik beetje naar de goede richting kijk, maar misschien dat dit wat is. Alleen weet ik niet hoe ik nu dan verder zou moeten...

Ik heb nu een multi-dimensional array opgezet, gegevens zijn nu nog hard coded, maar komen dus rechtstreeks vanuit database, opbouw result in newArray = full date, day, naam Activiteit.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
$resultMYSQL = array(array("2023-01-04", "04", "Activiteit 1"), array("2023-01-14", "14", "Activiteit 2"), array("2023-02-04", "04", "Activiteit 3"), array("2023-02-19", "19", "Activiteit 4"));

$keys = array_keys($resultMYSQL);
for($i = 0; $i < count($resultMYSQL); $i++) {
    echo $keys[$i] . "{<br>";
    foreach($resultMYSQL[$keys[$i]] as $key => $value) {
        echo "#" . $value . "<br>";
    }
    }
    echo "<br>";


Waardoor ik de volgende als resultaat heb:

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
0{
#2023-01-04
#04
#Activiteit 1
1{
#2023-01-14
#14
#Activiteit 2
2{
#2023-02-04
#04
#Activiteit 3
3{
#2023-02-19
#19
#Activiteit 4


Vrij logisch, maar hoe split ik nu das op naar apart per maand...

Dus:
Dat activiteit 1 en activiteit 2 met zijn array gegevens in dataJanuari komt te zitten
Dat activiteit 3 en activiteit 4 met zijn array gegevens in dataFebruari komt te zitten
Gewijzigd op 27/04/2023 20:16:53 door christiaan de kleine
 
Ivo P

Ivo P

27/04/2023 22:47:20
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$mndArr
= [];

while( $row = mysqlifetch()) {

  $mndArr[$row['jaarmaand']][] = $row;
}

?>
Gewijzigd op 27/04/2023 22:48:03 door Ivo P
 



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.