dubbele waarden uit array groeperen en de frequentie optellen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Johan M

Johan M

28/12/2007 00:04:00
Quote Anchor link
Beste mede PHPhulpers,

ik heb een scriptje dat cijfers (id's) in een array plaatst, deze kan er bijvoorbeeld zo uit komen te zien:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
Array
(
    [0] => 1
    [1] => 2
    [2] => 2
    [3] => 2
    [4] => 2
    [5] => 3
    [6] => 3
)


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)
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
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
// )
}


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.
 
PHP hulp

PHP hulp

24/12/2024 02:10:08
 
Jan Koehoorn

Jan Koehoorn

28/12/2007 00:05:00
Quote Anchor link
Uit mijn hoofd: array_count_values.
 
Johan M

Johan M

28/12/2007 00:08:00
Quote Anchor link
Zo, dat noem ik nog eens een snelle reactie!
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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
foreach (array_count_values($cart) as $key => $value) {
    echo 'Waarde ' . $key . ' komt ' . $value . ' keer voor<br>';
}
Is het verstandig het "array_count_values($cart)" gedeelte binnen deze foreach() te zetten zoals het nu staat, of kan dit beter via een varabele? Ik vermoed dat dit weinig tot niets uitmaakt, maar gewoon om even zeker te zijn?
Gewijzigd op 01/01/1970 01:00:00 door Johan M
 



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.