我有一个数组($number_list
),它有一个动态生成的值列表。数组中至少有1个值,不超过4个。
目前,我有一个很好的方法,使用这个逗号分隔列表......
$comma_list = implode(', ', $number_list);
但是,我想继续使用英语惯例,并在最后一个元素之前加上“and”。所以,让我们说$ number_list包含值4,5,6,7。我想回应一句话,“列表是4,5,6,和 7。”
如何在那里获得和的任何想法?
答案 0 :(得分:11)
从列表中删除最后一个元素,用逗号破坏剩下的内容,然后连接“和last_element”:
$last = array_pop($number_list);
$output = implode(', ', $number_list);
if ($output) {
$output .= ', and ';
}
$output .= $last;
如果您愿意,还可以将上述内容更简洁地写为
$last = array_pop($number_list);
$output = $number_list
? implode(', ', $number_list).', and '.$last
: $last;
<强>更新强>
我不得不承认我最初误解了这个问题并认为它是关于用“and”替换最后一个逗号,而不是在最后一个之前添加一个“和”项目。我已经编辑了答案,以针对后一种情况。请注意,可以通过分别为“glue”字符串选择" and "
或", and "
来轻松调整代码。
答案 1 :(得分:7)
尝试array_pop()
获取最后一个元素,然后array_push
修改并推回元素:
http://php.net/manual/en/function.array-pop.php
像
这样的东西$last_element = array_pop($number_list);
array_push($number_list, 'and '.$last_element);
然后你可以做你的内爆:
$comma_list = implode(', ', $number_list);
答案 2 :(得分:1)
如果列表末尾至少包含两个元素,则可以使用" and "
(或者如果您的问题不是", and "
)已经将它们内爆。
然后用", "
内爆整个数组。
示例:
<?php
$numbers = range(1, 4);
array_splice($numbers, -2, 2, implode(' and ', array_slice($numbers, -2)));
echo implode(', ', $numbers); prints "1, 2, 3 and 4"
答案 3 :(得分:1)
$number_list = array(4, 5, 6, 7);
$comma_list = strrev(implode(strrev(', and'), explode(strrev(','), strrev(implode(', ', $number_list)), 2)));
echo 'The list is ' . $comma_list . '.';
输出: 列表是4,5,6和7。
答案 4 :(得分:0)
# pop the last element off the array and formate text
if( count( $number_list )>1 ){
$and = " and ".array_pop( $number_list );
}else{
$and = '';
}
# Implode number list , and append $and
$comma_list = implode(', ', $number_list).$and;
答案 5 :(得分:0)
<?php
$number_list= Array(1,2,3,4,5);
$comma_list = implode(', ', $number_list);
$comma_list = substr($comma_list,0,strrpos($comma_list,',')).' And'.substr($comma_list,strrpos($comma_list,',')+1);
echo $comma_list;
//returns 1, 2, 3, 4 And 5
?>