如果我有一个如下所示的数组:
$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 != '' ? '.' : '');
这给了我这样的东西:
乔,亚当,迈克。但是,我想在最后一项之前添加“和”。
所以它会读到:
Joe,Adam,和 Mike。
如何修改我的代码才能执行此操作?
答案 0 :(得分:10)
阵列非常棒:
$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检查以避免通知和空白值。
答案 1 :(得分:0)
我想到的第一个想法是始终在一个辅助变量中保留最后一个名字。当你有另一个要放入时,你把它放在'逗号'并在辅助中获得下一个名字。
最后,当您添加了名称后,添加'和'以及来自aux的姓氏。
答案 2 :(得分:0)
不要将每个作为单独的变量发布,为什么不将它们作为数组发布:
#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";