gelijke waarden in een foreach loop samenvoegen
Sinds kort ben ik bezig om statistieken van Google Analytics in een tabel te zetten.
Zoals je op de afbeelding kunt zien, staan dezelfde data meerdere keren in de tabel. Dit heeft te maken met de locatie van de bezoeker. Hoe kan ik de bezoekersaantallen per datum samenvoegen?
Het zou erg fijn zijn als iemand mij kan helpen!
Groet, Steven
Dit is het stukje code:
<table border="1px">
<tr>
<td>Datum</td><td>Aantal bezoekers</td>
</tr>
Code (php)
</table>
Gewijzigd op 06/05/2013 11:50:27 door Steven Hoogervorst
Waar haal je die gaResults vandaan, rechtstreeks van google? Of heb je die ergens lokaal staan?
Van de Google Api
Code (php)
En dan $filteredResults gebruiken i.p.v. $gaResults
Ik zie nu pas dat voor 1 datum meerdere aantallen voorkomen, ik dacht dat de data dubbel was. Het voorbeeld in de reactie kan wel.
Gewijzigd op 06/05/2013 13:21:37 door TJVB tvb
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
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
<?php
# Set array $results_per_date voor het opslaan van het totaal aantal bezoekers per datum.
$results_per_date = array();
# De gehele handel doorlopen.
foreach($gaResults as $result){
# De datum naar het gewenste formaat omzetten.
$date = date('d-m-Y', strtotime($result->getDate()));
# Controleren of we moeten optellen of aanmaken.
if(array_key_exists($date, $results_per_date)){
# Optellen.
$results_per_date[$date] += $result->getVisits();
}
else{
# Aanmaken.
$results_per_date[$date] = $result->getVisits();
}
}
?>
# Set array $results_per_date voor het opslaan van het totaal aantal bezoekers per datum.
$results_per_date = array();
# De gehele handel doorlopen.
foreach($gaResults as $result){
# De datum naar het gewenste formaat omzetten.
$date = date('d-m-Y', strtotime($result->getDate()));
# Controleren of we moeten optellen of aanmaken.
if(array_key_exists($date, $results_per_date)){
# Optellen.
$results_per_date[$date] += $result->getVisits();
}
else{
# Aanmaken.
$results_per_date[$date] = $result->getVisits();
}
}
?>
$results_per_date word nu zoiets als array('20-04-2013' => 10, '05-05-2013' => 4);
Toevoeging op 06/05/2013 13:29:04:
Thanks voor het meedenken!
Heb nu dit:
De bezoekersaantallen zijn nu opgeteld per datum, alleen staan de dubbele data er nog..
Weet iemand een oplossing hiervoor?
Hoe ziet je php code er nu uit dan?
<tr>
<td>Datum</td><td>Aantal bezoekers</td>
</tr>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
$results_per_date = array();
foreach($gaResults as $result) {
$date = date('d-m-Y', strtotime($result->getDate()));
if (array_key_exists($date, $results_per_date)) {
$results_per_date[$date] += $result->getVisits();
} else {
$results_per_date[$date] = $result->getVisits();
}
echo '<tr>
<td>'.$date.'</td>';
echo '<td>'.$results_per_date[$date].'</td>
</tr>';
}
?>
$results_per_date = array();
foreach($gaResults as $result) {
$date = date('d-m-Y', strtotime($result->getDate()));
if (array_key_exists($date, $results_per_date)) {
$results_per_date[$date] += $result->getVisits();
} else {
$results_per_date[$date] = $result->getVisits();
}
echo '<tr>
<td>'.$date.'</td>';
echo '<td>'.$results_per_date[$date].'</td>
</tr>';
}
?>
</table>
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php
# Set array $results_per_date voor het opslaan van het totaal aantal bezoekers per datum.
$results_per_date = array();
# De gehele handel doorlopen.
foreach($gaResults as $result){
# De datum naar het gewenste formaat omzetten.
$date = date('d-m-Y', strtotime($result->getDate()));
# Controleren of we moeten optellen of aanmaken.
if(array_key_exists($date, $results_per_date)){
# Optellen.
$results_per_date[$date] += $result->getVisits();
}
else{
# Aanmaken.
$results_per_date[$date] = $result->getVisits();
}
}
?>
<table border="1px">
<tr>
<td>Datum</td>
<td>Aantal bezoekers</td>
</tr>
<?php
# Gegevens weergeven.
foreach($results_per_date as $date => $count){
echo '<tr><td>'.$date.'</td><td>'.$count.'</td></tr>';
}
?>
</table>
# Set array $results_per_date voor het opslaan van het totaal aantal bezoekers per datum.
$results_per_date = array();
# De gehele handel doorlopen.
foreach($gaResults as $result){
# De datum naar het gewenste formaat omzetten.
$date = date('d-m-Y', strtotime($result->getDate()));
# Controleren of we moeten optellen of aanmaken.
if(array_key_exists($date, $results_per_date)){
# Optellen.
$results_per_date[$date] += $result->getVisits();
}
else{
# Aanmaken.
$results_per_date[$date] = $result->getVisits();
}
}
?>
<table border="1px">
<tr>
<td>Datum</td>
<td>Aantal bezoekers</td>
</tr>
<?php
# Gegevens weergeven.
foreach($results_per_date as $date => $count){
echo '<tr><td>'.$date.'</td><td>'.$count.'</td></tr>';
}
?>
</table>
Gewijzigd op 06/05/2013 13:46:52 door - Mark -
Die werkt helaas niet..
Wat werkt er dan niet aan? Ik kan niet testen hier want dit stukje maakt gebruik van je Google Analytics gedeelte.
Alle data zitten door elkaar
Toevoeging op 06/05/2013 14:22:32:
Dit is eigenlijk wat ik wil hebben:
Datum Aantal bezoekers
29-04-201312
30-04-2013 4
01-05-2013 5
02-05-2013 1
03-05-2013 5
04-05-2013 13
05-05-2013 4
Toevoeging op 06/05/2013 14:56:06:
Kan het misschien met array_unique() ?
Gewijzigd op 06/05/2013 14:31:40 door Steven Hoogervorst
Nee, aan array_unique heb je niets. Ik kan me vergissen maar je hebt mijn stukje code nog steeds verkeerd staan want zo zou de lijst er niet mogen uitzien. Je hebt het toch niet in je eigen foreach lus gezet of wel? Die moet je eruit slopen namelijk.
Toevoeging op 06/05/2013 16:11:19:
Maar hoe werkt de onderste code eigenlijk?
foreach($results_per_date as $date => $count){
echo '<tr><td>'.$date.'</td><td>'.$count.'</td></tr>';
}
Mijn stukje script dient als vervanging voor het stukje script dat je zelf plaatste. De rest van je script is wel natuurlijk nodig anders werkt het niet.
Ik heb wel een idee, alleen wat verduidelijking zou erg fijn zijn!
Alvast bedankt voor het meedenken!
Code (php)
Ik denk dat jij alleen de volgende arrays kent?
Eigenlijk staat er.
Deze arrays ken ik ook wel, alleen is de $count variabele gelijk aan $result->getVisits()?
Nee, $count is gelijk aan het totaal aantal $result->getVisits() per dag.
Toevoeging op 06/05/2013 16:51:30:
het statement daarvan eigenlijk
Toevoeging op 06/05/2013 16:53:27:
In ieder geval hartelijk dank voor de hulp!
Het stukje script dat ik als eerste plaatste loopt je Google Analytics gegevens door en vult $results_per_page zodat we deze later kunnen gebruiken.
Zoals ik al zei.
Quote:
$results_per_date word nu zoiets als array('20-04-2013' => 10, '05-05-2013' => 4);