dubbele waarden uit array groeperen en de frequentie optellen
ik heb een scriptje dat cijfers (id's) in een array plaatst, deze kan er bijvoorbeeld zo uit komen te zien:
Nu wil ik dat de waarden worden gegroepeerd (dan krijg je dus alleen de losse waarden 1, 2 en 3), maar dat er ook wordt aangegeven hoeveel keer deze waarden voorkomen. Los van elkaar krijg ik dit voor elkaar, maar het lukt me dit niet later weer samen te voegen.
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
55
56
57
58
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
55
56
57
58
// $_SESSION['cart'] ziet er bijvoorbeeld zo uit: 3,3,2,2,2,2,1
// Controleer of de sessie bestaat
if (isset($_SESSION['cart']))
{
// Haal de sessie uit elkaar
$cart = explode(',' , $_SESSION['cart']);
// Sorteer de sessie
sort($cart);
// Unieke waarden uit de array halen
$unique1 = array_unique($cart);
// Aantallen keer dat elke waarde voorkomt in de array
$count1 = array_count_values($cart);
// Zorg ervoor dat zowel $unique en $qount dezelfde array-id's krijgen
foreach ($unique1 as $value)
{
$unique2[] = $value;
}
foreach ($count1 as $value)
{
$count2[] = $value;
}
echo 'Waarden: <pre>';
print_r ($unique2);
echo '</pre>';
// Resultaat:
// Array
// (
// [0] => 1
// [1] => 2
// [2] => 3
// )
/////////////////////////////////////////
echo '<br>Aantallen: <pre>';
print_r ($count2);
echo '</pre>';
// Resultaat:
// Array
// (
// [0] => 1
// [1] => 4
// [2] => 2
// )
}
// Controleer of de sessie bestaat
if (isset($_SESSION['cart']))
{
// Haal de sessie uit elkaar
$cart = explode(',' , $_SESSION['cart']);
// Sorteer de sessie
sort($cart);
// Unieke waarden uit de array halen
$unique1 = array_unique($cart);
// Aantallen keer dat elke waarde voorkomt in de array
$count1 = array_count_values($cart);
// Zorg ervoor dat zowel $unique en $qount dezelfde array-id's krijgen
foreach ($unique1 as $value)
{
$unique2[] = $value;
}
foreach ($count1 as $value)
{
$count2[] = $value;
}
echo 'Waarden: <pre>';
print_r ($unique2);
echo '</pre>';
// Resultaat:
// Array
// (
// [0] => 1
// [1] => 2
// [2] => 3
// )
/////////////////////////////////////////
echo '<br>Aantallen: <pre>';
print_r ($count2);
echo '</pre>';
// Resultaat:
// Array
// (
// [0] => 1
// [1] => 4
// [2] => 2
// )
}
Wat ik uiteindelijk wil is dat er dit wordt weergegeven:
waarde 1 komt 1 keer voor,
waarde 2 komt 4 keer voor,
waarde 3 komt 2 keer voor,
of iets dergelijks, met dit resultaat zou ik waarschijnlijk wel wat kunnen.
Ik heb mijn vraag en bevindingen tot zo ver redelijk uitgebreid geformuleerd, wellicht denk ik te moeilijk en heb ik een of andere functie over het hoofd gezien, of er simpelweg niet aan gedacht. Ik zou het op prijs stellen als iemand mij met dit probleem verder kan helpen. Als ik er over na denk lijkt het me dat het makkelijk te moet realiseren zijn, maar ik krijg het op het moment simpelweg niet voor elkaar.
Hopelijk heeft iemand een oplossing voor me,
alvast bedankt, Johan.
Uit mijn hoofd: array_count_values.
Ik dacht dus duidelijk te moeilijk, nu ik array_count_values bekijk op php.net zou dat best wel eens moeten kunnen gaan werken, ik ga even een poging wagen.
Tnx Jan,
grz. Johan.
Ps.: ik heb het nu zo opgelost:
Code (php)
1
2
3
2
3
foreach (array_count_values($cart) as $key => $value) {
echo 'Waarde ' . $key . ' komt ' . $value . ' keer voor<br>';
}
echo 'Waarde ' . $key . ' komt ' . $value . ' keer voor<br>';
}
Gewijzigd op 01/01/1970 01:00:00 door Johan M