Dag allemaal!

Hoe kun je in php nagaan hoe vaak dezelfde waarde in een array voorkomt en het aantal in een array zetten?
array_count_values heb ik geprobeerd, zonder resultaat.

voorbeeld:
foreach($gaResults as $result) {
echo $result->getSource();
}
uitkomst:
google
google
(direct)
(direct)
(direct)
google
google

Zet aantallen in array:

Bron Google komt 4x voor
Directe bezoekers komen 3x voor

$array = array('google' => '4', '(direct)' => '3');


Alvast bedankt!

Groet, Steven
Laten we even aannemen dat de array waarvan de waardes geteld moeten worden $results heet:

<?php
$results = array('google','google','(direct)','(direct)','(direct)','google','google');
$rcnt = array_count_values($results);
print_r($rcnt);
?>
Array ( [google] => 4 [(direct)] => 3 ) 
Tuurlijk, dit was puur even om aan te geven dat $rcnt een array is met de gevraagde waardes. Je kunt de afzonderlijke waardes ophalen met $rcnt['google'] en $rcnt['(direct)'].
Want nu wil ik eigenlijk hetgeen dat bij print_r uitkomt in een array zetten:
$array = array('google' => '4', '(direct)' => '3');

[size=xsmall]Toevoeging op 19/05/2013 15:46:22:[/size]

Wat ik nu heb is dit:

<?php
foreach($gaResults as $result) {
$rcnt = array_count_values($result->getSource());
echo $rcnt['google'];
}
?>
Maar dit heeft geen enkele waarde...
Waar komen deze waardes vandaan? Toch niet uit je database hoop ik?
Nee, van Google. Gebruik de Google API.

[size=xsmall]Toevoeging op 19/05/2013 16:12:16:[/size]

gapiReportEntry Object (
[metrics:gapiReportEntry:private] =>
Array ( [visits] => 1 )
[dimensions:gapiReportEntry:private] =>
Array (
[date] => 20130506
[source] => google
[country] => Netherlands
[region] => Overijssel
[city] => Hengelo
) )

Dit is een deel dat ik krijg als ik <? php print_r($result); ?> doe

[size=xsmall]Toevoeging op 19/05/2013 16:15:17:[/size]

Het lijkt erop dat er per datum een aparte array wordt aangemaakt...

[size=xsmall]Toevoeging op 19/05/2013 16:23:18:[/size]

De output die ik krijg bij <?php print_r($result->getSource()); ?> is dit:


googlegoogle(direct)(direct)(direct)googlegooglewinkelcentrumhasselo.nlgoogle(direct)(direct)googlegooglekulturhushasselo.nlsearch.certified-toolbar.com(direct)avggooglekulturhushasselo.nlgooglegooglekulturhushasselo.nl(direct)(direct)avggooglegooglegooglewijkwegwijs.nlwinkelcentrumhasselo.nl

[size=xsmall]Toevoeging op 19/05/2013 16:46:29:[/size]

Heb 't voor elkaar gekregen!

<?php
$resultSource = NULL;
foreach($gaResults as $result) {
$resultSource .= $result->getSource().' ';
}
$arraySources = explode(' ',$resultSource);
print_r(array_count_values($arraySources));

?>

[size=xsmall]Toevoeging op 19/05/2013 16:46:57:[/size]

Iedereen bedankt voor de hulp!
Steven Hoogervorst op 19/05/2013 15:40:11

Want nu wil ik eigenlijk hetgeen dat bij print_r uitkomt in een array zetten:
$array = array('google' => '4', '(direct)' => '3');

Je bent lekker omslachtig bezig. ;-) print_r toont namelijk de inhoud van de array $rcnt, dus wat je wilt hebben, heb je al lang. Dat is de array $rcnt (uitgaande van de code uit mijn eerste bericht).

De code uit je laatste bericht is ook omslachtig. Je haalt waardes op, zet ze in een string met spaties ertussen, en breekt vervolgens de string op in een array. Waarom zet je het dan niet meteen in een array? ;-)

Dus:

<?php
$resultSource = array();
foreach($gaResults as $result) {
$resultSource[] = $result->getSource();
}
print_r(array_count_values($resultSource));
?>
Dit heb ik gedaan omdat het op andere manieren niet werkte. Door een nieuwe array te maken, kon ik het zó maken als ik wilde :)

Reageren