Nagaan hoe vaak dezelfde waarde in een array voorkomt
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:
(direct)
(direct)
(direct)
Zet aantallen in array:
Bron Google komt 4x voor
Directe bezoekers komen 3x voor
$array = array('google' => '4', '(direct)' => '3');
Alvast bedankt!
Groet, Steven
Gewijzigd op 19/05/2013 14:57:53 door Steven Hoogervorst
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$results = array('google','google','(direct)','(direct)','(direct)','google','google');
$rcnt = array_count_values($results);
print_r($rcnt);
?>
Array ( [google] => 4 [(direct)] => 3 )
$results = array('google','google','(direct)','(direct)','(direct)','google','google');
$rcnt = array_count_values($results);
print_r($rcnt);
?>
Array ( [google] => 4 [(direct)] => 3 )
Kan ik in plaats van print_r ook echo gebruiken?
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)'].
$array = array('google' => '4', '(direct)' => '3');
Toevoeging op 19/05/2013 15:46:22:
Wat ik nu heb is dit:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
foreach($gaResults as $result) {
$rcnt = array_count_values($result->getSource());
echo $rcnt['google'];
}
?>
foreach($gaResults as $result) {
$rcnt = array_count_values($result->getSource());
echo $rcnt['google'];
}
?>
Maar dit heeft geen enkele waarde...
Gewijzigd op 19/05/2013 15:57:06 door Steven Hoogervorst
Waar komen deze waardes vandaan? Toch niet uit je database hoop ik?
Toevoeging op 19/05/2013 16:12:16:
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 doe
Toevoeging op 19/05/2013 16:15:17:
Het lijkt erop dat er per datum een aparte array wordt aangemaakt...
Toevoeging op 19/05/2013 16:23:18:
De output die ik krijg bij is dit:
googlegoogle(direct)(direct)(direct)googlegooglewinkelcentrumhasselo.nlgoogle(direct)(direct)googlegooglekulturhushasselo.nlsearch.certified-toolbar.com(direct)avggooglekulturhushasselo.nlgooglegooglekulturhushasselo.nl(direct)(direct)avggooglegooglegooglewijkwegwijs.nlwinkelcentrumhasselo.nl
Toevoeging op 19/05/2013 16:46:29:
Heb 't voor elkaar gekregen!
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$resultSource = NULL;
foreach($gaResults as $result) {
$resultSource .= $result->getSource().' ';
}
$arraySources = explode(' ',$resultSource);
print_r(array_count_values($arraySources));
?>
$resultSource = NULL;
foreach($gaResults as $result) {
$resultSource .= $result->getSource().' ';
}
$arraySources = explode(' ',$resultSource);
print_r(array_count_values($arraySources));
?>
Toevoeging op 19/05/2013 16:46:57:
Iedereen bedankt voor de hulp!
Gewijzigd op 19/05/2013 16:47:46 door Steven Hoogervorst
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');
$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:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$resultSource = array();
foreach($gaResults as $result) {
$resultSource[] = $result->getSource();
}
print_r(array_count_values($resultSource));
?>
$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 :)