Telle flere sjangrer i hvert felt

Dette er en PHP-funksjon til å hjelpe Audun Sæther med, som hvor du kan lese problemstillingen under kommentarene på forrige post. For å summere opp hva den gjør:

Om du har en DVD-liste og har felt som heter genre eller lignende, hvor du lagrer sjangrer med " / " som separator. F.eks slik: "Thriller / Drama / Action".

Så vil du telle hvor mange poster du har av hver sjanger, da kan du bruke denne funksjonen.

Funksjonen ser slik ut:

  1. /**
  2. * Count how many there is of each genre in database-field.
  3. * Save structure in the field:
  4. * Genre One / Genre Two / Genre Three
  5. *
  6. * @param bool $one
  7. * @return array
  8. */
  9. function get_top_genre ($one = false)
  10. {
  11.     $cnt = mysql_query("SELECT genre
  12.                         FROM dvd");
  13.     if(!$cnt)
  14.         die(mysql_error());
  15.        
  16.     $arr = array();
  17.    
  18.     while ($row = mysql_fetch_assoc($cnt)) {
  19.        
  20.         $row['genre'] = strtolower($row['genre']);
  21.         if (strpos($row['genre'], '/')
  22.         !== false) {
  23.            
  24.             $inner = explode(' / ',
  25.             $row['genre']);
  26.             foreach($inner as $output) {
  27.                 $arr[ucfirst($output)]++;
  28.             }
  29.            
  30.         } else {
  31.            
  32.             $arr[ucfirst($row['genre'])]++;
  33.         }
  34.        
  35.     }
  36.     arsort($arr);
  37.    
  38.     if($one !== false) {
  39.         $arr = array_flip($arr);
  40.         return array_shift($arr);
  41.     }
  42.    
  43.     return $arr;
  44. }

Så om du bruker den med true i første argumentet blir det returnert den sjangeren som forekommer mest. Om det er to med samme, blir ene av de returnert.

4 responser om “Telle flere sjangrer i hvert felt”

  1. Takk for den, får vel ta meg tid til å ordne dette snart.


  2. Jess, bare hyggelig!


  3. Hva med explode("/", $row['genre']); og så trimme det? Tenkte bare i tilfelle noen glemmer et mellomrom.


  4. Jo da. Det kan jo godt gjøres, for å hindre at det er for strengt. Bare å gjøre slik da:

    1. $inner = explode(' / ', $row['genre']);
    2. $inner = array_map('trim', $inner);

    Kan også bruke en regexp til å gjøre seperator valgfri og telle antall sjangrer. Det kan være mye enklere enn å gjøre som ovenfor.


Legg igjen respons

Fyll ut alle felt markert med *

Brukerinformasjon
  1. Kan bruke følgende html: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong> og [html] [css], [mysql] og [php] Hold posten ren og fin!

    Siter valgt tekst

E-post-varsel uten å skrive kommentar.

Info om posten

Innlegget ble postet 01.02.07 16:40 og ligger under kategorien PHP / MySQL. Du kan abonnere på kommentarene ved å bruke RSS 2.0 feed. Du kan legge til kommenter, eller trackback fra din blogg/side.

Resurser

Arkiver

Metainfo


Siste Flickr-bilder

  • Commentsystem (20070308)
  • Ukraina Aksjonen 2006 (20070306)
  • Mikael Brevik blogg (20070306)
  • Mikael Brevik (20070306)
  • Brukerdefinert side - AVIS2 (20070306)
  • Brevik Webutvikling (20070306)
  • skyscraper
  • visittkort