2009-06-18 2 views
3

Si j'ai un tableau qui ressemble à ceci:Comment puis-je afficher un tableau dans un format lisible par l'homme?

$str = ''; 
if($_POST['first']) 
    $str = $_POST['first']; 
if($_POST['second']) 
    $str .= ($str != '' ? ',' : '') . $_POST['second']; 
if($_POST['third']) 
    $str .= ($str != '' ? ',' : '') . $_POST['third']; 
if($_POST['fourth']) 
    $str .= ($str != '' ? ',' : '') . $_POST['second']; 
$str .= ($str != '' ? '.' : ''); 

Ce qui me donne quelque chose comme ceci:

Joe, Adam, Mike.

Cependant, je voudrais ajouter un "et" avant le dernier article.

Il se lirait donc:

Joe, Adam, et Mike.

Comment puis-je modifier mon code pour ce faire?

Répondre

10

Les tableaux sont impressionnants pour cela:

$str = array(); 
foreach (array('first','second','third','fourth') as $k) { 
    if ($_POST[$k]) { 
     $str[] = $k; 
    } 
} 
$last = array_pop($str); 
echo implode(", ", $str) . " and " . $last; 

Vous devriez probablement cas particulier ci-dessus quand il y a un article. Moi, en fait, écrit une fonction appelée « conjonction » qui fait ce qui précède, et comprend le cas particulier:

function conjunction($x, $c="or") 
{ 
    if (count($x) <= 1) { 
     return implode("", $x); 
    } 
    $ll = array_pop($x); 
    return implode(", ", $x) . " $c $ll"; 
} 

Belle question!

Mise à jour: manière d'usage général pour le faire:

function and_form_fields($fields) 
{ 
    $str = array(); 
    foreach ($fields as $k) { 
     if (array_key_exists($k, $_POST) && trim($_POST[$k])) { 
       $str[] = $k; 
     } 
    } 
    return conjunction($str, "and"); 
} 

... 

and_form_fields(array("Name_1","Name_2",...)); 

j'ai ajouté correct $ _POST vérification pour éviter des avis et des valeurs vides.

+1

plus votre définition fonction rimes: P – alex

+0

ci-dessus renvoie uniquement: premier, deuxième, troisième et quatrième Je voudrais ajouter la dernière virgule, souvent appelée virgule série. Comment puis-je modifier le tableau ci-dessus pour accomplir ceci? Merci les gars! –

+0

Je pense que la virgule est techniquement pas correct en anglais, mais, il suffit de changer la dernière ligne à: ", et". $ last --OU-- ", $ c $ ll"; B – razzed

0

La première idée qui me vient à l'esprit est de toujours garder un dernier nom dans un variabile auxiliaire. Quand vous en avez un autre à mettre, vous le prenez en mettant la 'virgule' et obtenez le nom suivant dans l'aux. À la fin, lorsque vous avez ajouté les noms, vous ajoutez «et» et le nom de famille aux.

0

Au lieu d'afficher chacun comme une variable distincte, pourquoi ne pas les afficher comme un tableau:

#pull the array from the POST: 
$postedarray = $_POST['names']; 

#count the number of elements in the posted array: 
$numinarray = count($postedarray); 

#subtract 1 from the number of elements, because array elements start at 0 
$numinarray = $numinarray -1; 

#set a prepend string 
$prependstr = "and "; 

#Pull the last element of the array 
$lastname = $postedarray[$numinarray]; 

#re-define the last element to contan the prepended string 
$postedarray[$numinarray] = "$prependstr$lastname"; 

#format the array for your requested output 
$comma_separated = implode(", ", $postedarray); 

print "$comma_separated"; 
Questions connexes