gelijke waarden in een foreach loop samenvoegen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Steven Hoogervorst

Steven Hoogervorst

06/05/2013 11:46:41
Quote Anchor link
Hallo allemaal!

Sinds kort ben ik bezig om statistieken van Google Analytics in een tabel te zetten.
Zoals je op de afbeelding 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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
 
foreach($gaResults as $result) {
echo '<tr>


<td>'
.date('d-m-Y', strtotime($result->getDate())).'</td>
<td>'
.$result->getVisits().'</td>
</tr>'
;
}

?>

</table>
Gewijzigd op 06/05/2013 11:50:27 door Steven Hoogervorst
 
PHP hulp

PHP hulp

25/12/2024 20:05:44
 
TJVB tvb

TJVB tvb

06/05/2013 11:54:31
Quote Anchor link
Waar haal je die gaResults vandaan, rechtstreeks van google? Of heb je die ergens lokaal staan?
 
Steven Hoogervorst

Steven Hoogervorst

06/05/2013 12:10:18
Quote Anchor link
Van de Google Api
 
TJVB tvb

TJVB tvb

06/05/2013 12:18:05
Quote Anchor link
Maar je krijgt dus die dubbele data van de Google api?

Wat je kunt doen is
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$filteredResults
= array();
foreach($gaResults as $result) {
    $filteredResults[date('d-m-Y', strtotime($result->getDate()))] = $result;
}

?>

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
 
- Mark -

- Mark -

06/05/2013 12:19:15
Quote Anchor link
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
<?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();

            }
        }


?>


$results_per_date word nu zoiets als array('20-04-2013' => 10, '05-05-2013' => 4);
 
Steven Hoogervorst

Steven Hoogervorst

06/05/2013 12:21:30
Quote Anchor link
Zou je kunnen uitleggen wat je precies doet?

Toevoeging op 06/05/2013 13:29:04:

Thanks voor het meedenken!

Heb nu dit:
Afbeelding

De bezoekersaantallen zijn nu opgeteld per datum, alleen staan de dubbele data er nog..
Weet iemand een oplossing hiervoor?
 
- Mark -

- Mark -

06/05/2013 13:36:19
Quote Anchor link
Hoe ziet je php code er nu uit dan?
 
Steven Hoogervorst

Steven Hoogervorst

06/05/2013 13:38:58
Quote Anchor link
<table border="1px">
<tr>
<td>Datum</td><td>Aantal bezoekers</td>
</tr>
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
<?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>'
;
}

?>

</table>
 
- Mark -

- Mark -

06/05/2013 13:45:36
Quote Anchor link
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
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>  
Gewijzigd op 06/05/2013 13:46:52 door - Mark -
 
Steven Hoogervorst

Steven Hoogervorst

06/05/2013 13:50:48
Quote Anchor link
Die werkt helaas niet..
 
- Mark -

- Mark -

06/05/2013 13:54:23
Quote Anchor link
Wat werkt er dan niet aan? Ik kan niet testen hier want dit stukje maakt gebruik van je Google Analytics gedeelte.
 
Steven Hoogervorst

Steven Hoogervorst

06/05/2013 14:16:52
Quote Anchor link
Zie nu dit:
Afbeelding

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-201312
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
 
- Mark -

- Mark -

06/05/2013 16:00:51
Quote Anchor link
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.
 
Steven Hoogervorst

Steven Hoogervorst

06/05/2013 16:09:53
Quote Anchor link
Ik had de onderste code van de tabel inderdaad in de originele foreach loop gezet.

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>';
}
 
- Mark -

- Mark -

06/05/2013 16:13:26
Quote Anchor link
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.
 
Steven Hoogervorst

Steven Hoogervorst

06/05/2013 16:19:28
Quote Anchor link
Ja, dat snap ik. Alleen wat ik niet snap is wat er precies bij het onderste script gebeurt.
Ik heb wel een idee, alleen wat verduidelijking zou erg fijn zijn!

Alvast bedankt voor het meedenken!
 
- Mark -

- Mark -

06/05/2013 16:25:36
Quote Anchor link
In de praktijk zul je zoiets niet tegenkomen want voornamen zijn niet uniek. Maar hopelijk is het zo wat duidelijker.

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
<?php

    # De lijst met gasten.

        $gasten = array('Pietje' => 'Puk', 'Dagobert' => 'Duck');


    # Alle gasten weergeven.

        foreach($gasten as $voornaam => $achternaam){

            echo $voornaam.' '.$achternaam.'<br >';
        }

?>


Ik denk dat jij alleen de volgende arrays kent?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $gasten = array('Pietje Puk', 'Dagobert Duck'); ?>


Eigenlijk staat er.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $gasten = array(0 => 'Pietje Puk', 1 => 'Dagobert Duck'); ?>
 
Steven Hoogervorst

Steven Hoogervorst

06/05/2013 16:39:21
Quote Anchor link
Deze arrays ken ik ook wel, alleen is de $count variabele gelijk aan $result->getVisits()?
 
- Mark -

- Mark -

06/05/2013 16:44:19
Quote Anchor link
Nee, $count is gelijk aan het totaal aantal $result->getVisits() per dag.
 
Steven Hoogervorst

Steven Hoogervorst

06/05/2013 16:46:17
Quote Anchor link
En die krijg je door $results_per_date

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!
 
- Mark -

- Mark -

06/05/2013 16:56:15
Quote Anchor link
$results_per_date is niets meer dan een verzamelbak waarin het totaal aantal $result->getVisits() per dag in wordt opgeslagen.

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);
 



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.