Nasıl bir insan okunabilir biçimde bir dizi görüntüleyebilir?

3 Cevap php

Şöyle bir dizi varsa:

$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 != '' ? '.' : '');

Hangi bana böyle bir şey veriyor:

Joe Adam, Mike.

Ancak, son öğe önce "and" eklemek istiyorum.

Yani o zaman okurdu:

Joe Adam, and Mike.

Nasıl benim kod bu edersiniz değiştirebilir?

3 Cevap

Diziler için bu Başar:

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

Muhtemelen özel bir durum gerektiği bir öğe olduğu zaman için yukarıda. Ben, aslında, yukarıda yapar ve özel çantası içerir "Sayıma" adında bir işlevi yazdı:

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

Güzel bir soru!

Updated: Bunu yapmak için genel amaçlı yol:

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",...));

Ben uyarıları önlemek için kontrol doğru $ _POST, ve boş değerleri eklendi.

Aklıma gelen ilk ideea daima auxiliar variabile bir sonuncusu isim tutmaktır. Eğer koymak için başka bir tane var, bunu 'virgül' koymak ve aux sonraki ismi olsun almak.

Sonunda, bittiğinde isimleri eklendi, eklemek 've' ve aux soyadı.

Bunun yerine ayrı bir değişken olarak her mesajın, neden bir dizi olarak göndermek değil:

#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";