Как я могу отобразить массив в удобочитаемом формате? - PullRequest
3 голосов
/ 18 июня 2009

Если у меня есть массив, который выглядит так:

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

Что дает мне что-то вроде этого:

Джо, Адам, Майк.

Однако я хотел бы добавить « и » перед последним элементом.

Так что тогда будет читать:

Джо, Адам, и Майк.

Как я могу изменить свой код, чтобы сделать это?

Ответы [ 3 ]

10 голосов
/ 18 июня 2009

Массивы хороши для этого:

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

Вы должны, вероятно, особый случай выше, когда есть один предмет. Я, на самом деле, написал функцию под названием «соединение», которая выполняет все вышеперечисленное и включает в себя особый случай:

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

Хороший вопрос!

Обновлено : универсальный способ сделать это:

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

...

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

Я добавил правильную проверку $ _POST, чтобы избежать уведомлений и пустых значений.

0 голосов
/ 18 июня 2009

Вместо публикации каждого в виде отдельной переменной, почему бы не разместить их в виде массива:

#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";
0 голосов
/ 18 июня 2009

Первая идея, которая приходит мне в голову, - это всегда сохранять фамилию в знакомой переменной. Когда у вас есть еще один, который нужно вставить, вы берете его, ставите запятую и получаете следующее имя в aux.

В конце, когда вы закончили добавлять имена, вы добавляете 'и' и фамилию из aux.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...