2011-06-25 2 views
0

J'ai une chaîne (pas un tableau) de niveaux pour un étudiant. Voici quelques exemples d'entrées possibles:PHP: Comment convertir les chaînes de niveaux de notes séparées par des virgules en «gammes de notes» lisibles en anglais?

k,1,2,3,4,5 
1,2,3,4 
1 
1,2 
3,4,5 

niveau de qualité maximale pour un étudiant est 5.

Je veux convertir la chaîne à une plage de lecture en anglais. Donc, étant donné mes exemples ci-dessus, ce serait la sortie:

K & Up 
1-4 
1 
1 & 2 
3 & Up 

Comment le gérer au mieux? Les exemples sont appréciés, merci!

Répondre

1
<?php 
function toRange($string) 
{ 
$min = "K"; 
$max = 5; 

//take string and turn into an array 
$grades = explode(", ",$string); 
$firstItem = $grades[0]; 
$lastItem = $grades[count($grades)-1]; 
if (count($grades) == 1) 
{ 
    $output = $firstItem; 
} 
else 
{ 
    if ($firstItem == "K") 
    { 
     if ($lastItem == 5) 
     { 
      $output = "K & Up"; 
     } 
     if ($lastItem == 1) 
     { 
      $output = "K & 1"; 
     } 
     else { 
      $output = "K -" . $lastItem; 
     } 
     break; 

    } 
    else 
    { 
     if ($lastItem == 5) 
     { 
      if ($firstItem != 4) 
      { 
       $output = $firstItem . " & Up"; 
      } 
      else { 
       $output = "4 & 5"; 
      } 
     } 
     else { 
      if ($lastItem > $firstItem + 1) 
      { 
       $output = $firstItem . " - " . $lastItem; 
      } 
      else { 
       $output = $firstItem . " & " . $lastItem; 
      } 
     } 
    } 


    } 
return $output; 
    } 


?> 

Cela aurait pu être beaucoup plus facile sans l'implication de la lettre.

+0

Merci! Je suis d'accord, la lettre le rejette. Je devrais peut-être changer la façon dont les données entrent en premier lieu pour le nettoyer un peu. Je devais ajouter 1 de plus si la déclaration à votre code pour attraper pour quand le niveau scolaire est seulement 1 note. Je l'ai ajouté avant tous les autres ifs: if ($ lastItem == $ premierItem) {$ output = $ premierItem; return $ output;} – k00k

+0

En y réfléchissant maintenant, vous pouvez simplement faire le K a 0 pendant le traitement, puis changer sur la sortie avec str_replace ("0", "K", $ sortie). Quoi qu'il en soit, j'ai fait ces changements maintenant dans le post, quoique d'une manière différente. –

+0

Oui, pensait juste la même chose à propos du 0. – k00k

Questions connexes