Gå til innhold

Telle antall like oppføringer


Anbefalte innlegg

Hei

 

Har en tilsynelatende enkel oppgave her, men lurer på om intelligensen min kommer til kort. Jeg klarer nemlig ikke å finne ut hvordan saken skal programmeres:

Jeg har en tallrekke, eks. "4,4,4,6,6,12,12,30,45,45".

Så vil jeg telle hvor mange tilfeller det er av hvert tall. Jeg ser jo med det blotte øye at det er 3 firere, 2 seksere osv. Men klarer faen ikke å få PHP til å finne det ut.

 

Blir som vanlig takknemlig for all hjelp :)

Lenke til kommentar
Videoannonse
Annonse

<?
$array = explode(",", $string);
sort($array);

foreach ($array as $key => $value)
{
$array2[$value] += 1;
}

print_r($array2);
?>

 

burde i ditt tilfelle gi:

 

$array[4] = 3
$array[6] = 2
$array[12] = 2
$array[30] = 1
$array[45]  = 2

Endret av Raring
Lenke til kommentar

Takker for raskt svar, men det var visst ikke så enkelt som jeg hadde tenkt. Jeg tenker nå å skrive en liste som sier:

Produktid 4: 3 oppføringer

Produktid 6: 2 oppføringer

Produktid 12: 1 oppføring

 

Men jeg vet ikke hvilke produktID-er jeg har. Ergo kan jeg ikke skrive $array[4].

 

Mulig jeg er trøtt altså, men...

Lenke til kommentar

Uh, ikke helt lett å forstå hva i all verden som er problemet.

 

Du har en liste over produktID'er og vil telle antall oppføringer. Dersom du vil hente ut èn av disse antallene (f.eks. 4) er du naturligvis nødt til å ha produktID'en, ettersom det er det listen i utgangspunktet består av.

Endret av Jonas
Lenke til kommentar

<?
$string = "4,4,4,6,6,12,12,30,45,45";
$array = explode(",", $string);
sort($array);
$counter = 0;

foreach ($array as $key => $value)
{
$array2[$value] += 1;
}

foreach ($array2 as $key => $value)
{
$array3[$counter][0] = $key;
$array3[$counter][1] = $value;
$counter++;
}
?>

 

Burde gi:

 

 

$array[0][0] = 4 //Hvilket tall
$array[0][1] = 3 //Antall oppføringer av overnevnte tall

$array[1][0] = 6 //Hvilket tall
$array[1][1] = 2 //Antall oppføringer av overnevnte tall

$array[2][0] = 12 //Hvilket tall
$array[2][1] = 2 //Antall oppføringer av overnevnte tall

$array[3][0] = 30 //Hvilket tall
$array[3][1] = 1 //Antall oppføringer av overnevnte tall

$array[4][0] = 45 //Hvilket tall
$array[4][1] = 2 //Antall oppføringer av overnevnte tall

Endret av Raring
Lenke til kommentar
Uh, ikke helt lett å forstå hva i all verden som er problemet.

 

Du har en liste over produktID'er og vil telle antall oppføringer. Dersom du vil hente ut èn av disse antallene (f.eks. 4) er du naturligvis nødt til å ha produktID'en, ettersom det er det listen i utgangspunktet består av.

Greia er at jeg lager et enkelt handlesystem. Der hver vare har en ID. Ettersom brukeren velger varer havner de ID-en i en cookie. Derav tallrekka: "4,4,4,6,6.."

Brukeren vil ha 3 stykker av varen med ID 4. Men når jeg viser handlevognen vil jeg jo ikke skrive

ProduktID 4, antall: 1

ProduktID 4, antall: 1

ProduktID 4, antall: 1

Det vil se bedre ut med

ProduktID 4, antall: 3

 

Naturlig nok vet jeg ikke hvilke varer brukeren ønsker og dermed ikke hvilke tall som befinner seg i tallrekka.

Klarere da?

 

Raring: Takker for hjelpen, men løsningen gav meg ikke svaret direkte dessverre. Skal prøve å tenke litt selv også først, med mindre noen har en umiddelbar løsning :)

Endret av Kenneth Dammyr
Lenke til kommentar

Personlig syntes jeg at mitt siste svar passet din situasjon perfekt og gjør derfor et siste forsøk:

 

<?
//Liste over produkter
$product = array('Ost','Melk','Smør','Juice','Iskrem','Cornflakes','Mel','Bakepulver','Sukker');

//Hva som står i din cookie
$string = "4,4,4,6,6,3,3,3,3,1";

//deler opp stringen til array
$array = explode(",", $string);

//Sorterer arrayet
sort($array);

$counter = 0;

//Teller opp antall forekomster av hvert produkt
foreach ($array as $key => $value)
{
if(isset($array2[$value]))
	{
	$array2[$value] += 1;
}
else
{
	$array2[$value] = 1;
}
}

//Samler infrmasjonen i et multi-dimensjonalt array
foreach ($array2 as $key => $value)
{
$array3[$counter][0] = $key;
$array3[$counter][1] = $value;
$counter++;
}

//Printer output
for ($i=0; $i < sizeof($array3); $i++) { 
echo $product[$array3[$i][0]] . ": " . $array3[$i][1] . " stk.<br>";
}
?>

 

Dette vil gi:

 

Melk: 1 stk.
Juice: 4 stk.
Iskrem: 3 stk.
Mel: 2 stk.

Endret av Raring
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...