Datums per maand samenvoegen in array
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)
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
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."#";
}
$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.
maar het kan ook handig zijn om maand en jaar apart op te halen.
Code (php)
1
2
3
4
5
6
7
8
9
10
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;
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
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
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)
1
2
3
4
5
6
7
8
9
10
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>";
$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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
#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
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$mndArr = [];
while( $row = mysqlifetch()) {
$mndArr[$row['jaarmaand']][] = $row;
}
?>
$mndArr = [];
while( $row = mysqlifetch()) {
$mndArr[$row['jaarmaand']][] = $row;
}
?>
Gewijzigd op 27/04/2023 22:48:03 door Ivo P