Avatar billede nemlig Professor
13. januar 2013 - 13:22 Der er 17 kommentarer og
1 løsning

Tæl antal forekomster med bestemt i værdi i et array

Hejsa.
Jeg har et multi-array, som fx er defineret sådan her:

$my_data[] = array(
'id' => $row['id'],
'vaerdi' => $row['vaerdi']);

Hvordan tæller jeg, hvormange forekomster der er i arrayet, hvor 'vaerdi' = 2?
Avatar billede DeeDawg Nybegynder
13. januar 2013 - 13:59 #1
En sådan funktion giver PHP dig heldigvis fra starten

$result = array_count_values($my_data);
echo "Værdien 2 blev fundet {$result[2]} gange";

Og nogle ville måske påstå at du vil få en bedre performance ud af, selv at loope igennem dit array og kun søge efter den ene enkelte værdi. Men uanset hvordan man vender og drejer det, er du nødt til at loope igennem hele arrayet, så om du tæller 1 værdi eller dem alle undervejs, har næppe nogen indflydelse. :)
Avatar billede olebole Juniormester
13. januar 2013 - 15:26 #2
<ole>

#1: Jeg tror spørgsmålet er misforstået, for den funktion, tvivler jeg på, løser problemet(?)

@namlig: Et associativt array kan kun indeholde ét element med samme key, så der kan ikke være flere værdier af 'vaerdi'. Jeg tror, du må forklare nærmere  =)

/mvh
</bole>
Avatar billede olebole Juniormester
13. januar 2013 - 15:30 #3
Ahhh ... nu tror jeg, jeg forstår  *o)

$num = 0;
for ($i=0,$j=count($my_data); $i<$j; $i++) {
    if ($my_data[$i]['vaerdi']==2) $num++;
}
echo $num;
Avatar billede nemlig Professor
13. januar 2013 - 15:36 #4
Tak Ole - det er korrekt forstået.
Jeg troede, at der fandtes en count-funktion, der kunne hente forekomsterne.

Men loop fungerer.

Tak for bidraget :)
Avatar billede olebole Juniormester
13. januar 2013 - 15:54 #5
PHP har faktisk ret mange array funktioner, så jeg var lige på php.net for at sikre mig, det ikke bare var den gamle, slidte celle, der havde tømt cache'en. Men jeg kan ikke finde noget - og heller ikke et par funktioner, som med lidt krea kan kombineres til noget brugbart.

Jeg samler som bekendt ikke point, men det kan være DeeDawg gerne vil have noget for forsøget  =)
Avatar billede nemlig Professor
13. januar 2013 - 16:17 #6
Super - tak for info og indsatsen :)
DeeDawg: Du er velkommen til at smide et svar.
Avatar billede DeeDawg Nybegynder
13. januar 2013 - 19:05 #7
Tænk at jeg overså det *suk*. Mange tak for tilbuddet nemlig, men du beholder dem bare selv. ;)
Avatar billede arne_v Ekspert
13. januar 2013 - 19:23 #8
Hvis PHP 5.3 eller nyere:

<?php
$data = array();
$data[] = array('id' => 1, 'val' => 1);
$data[] = array('id' => 2, 'val' => 2);
$data[] = array('id' => 3, 'val' => 2);
$data[] = array('id' => 4, 'val' => 4);
$data[] = array('id' => 5, 'val' => 4);
$data[] = array('id' => 6, 'val' => 4);
$valcnt = array_count_values(array_map(function($row) { return $row['val']; }, $data));
print_r($valcnt);
?>
Avatar billede nemlig Professor
13. januar 2013 - 19:53 #9
OK Arne. Ser spændende ud.
Med udgangspunkt i dit array-eksempel, hvad vil koden så være, når jeg bare vil have et tal for, hvor mange forekomster der er, hvor 'val' = 4.

I dit eksempel skal resultatet af udtrækket være 3 gange.
Avatar billede arne_v Ekspert
13. januar 2013 - 19:56 #10
$valcnt[4]
Avatar billede nemlig Professor
13. januar 2013 - 20:05 #11
Sejt - tak for det. Jeg har version 5.3.13.
Smidt et svar ;)
Avatar billede olebole Juniormester
13. januar 2013 - 21:29 #12
Selvfølgelig map! Den har vist endda været tilgængelig siden version 4.0.6  =)
Avatar billede arne_v Ekspert
13. januar 2013 - 21:31 #13
svar
Avatar billede arne_v Ekspert
13. januar 2013 - 21:32 #14
array_map er gammel, men den anonyme funktion er ny i 5.3 og uden den gaar lidt af det elegante af loesningen.
Avatar billede olebole Juniormester
13. januar 2013 - 21:49 #15
*o)
Avatar billede showsource Seniormester
13. januar 2013 - 23:38 #16
Øhh, det ligner jo et udtræk fra db, så hvorfor ikke bruge en COUNT i query.
Avatar billede nemlig Professor
13. januar 2013 - 23:52 #17
Count i query kender jeg. Det er ikke helt så simpelt, som i eksemplet. Der er tale om udtræk fra flere tabeller og frasortering af data. Ellers tak.
Avatar billede arne_v Ekspert
14. januar 2013 - 03:08 #18
Man man meget med COUNT, JOIN, WHERE, GROUP BY og HAVING.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester