7

我有一个数组 ( $number_list),它有一个动态生成的值列表。数组中至少有 1 个值且不超过 4 个。

目前,我有一个很好的方法来使用这个以逗号分隔的列表......

$comma_list = implode(', ', $number_list);

但是,我想保持英语惯例,并在最后一个元素之前加上“and”这个词。所以,假设 $number_list 包含值 4、5、6、7。我想回应这样的语句,“列表是 4、5、67”。

任何想法如何得到它在那里?

4

6 回答 6

13

从列表中删除最后一个元素,用逗号分解剩下的内容,然后连接“和 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”替换最后一个逗号,而不是在最后一项之前添加“and”。我已经编辑了针对后一种情况的答案。请注意,可以通过分别选择“glue”字符串" and "", and "“glue”字符串轻松调整代码。

于 2013-08-27T22:40:12.240 回答
8

尝试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);
于 2013-08-27T22:40:55.573 回答
2

如果列表末尾至少有两个元素,则您可以使用" 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"

演示:https ://eval.in/45277

于 2013-08-27T22:47:54.777 回答
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。

于 2016-06-06T22:58:01.843 回答
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;
于 2013-08-27T22:42:04.967 回答
0

strrpos

<?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
?>
于 2013-08-27T22:45:58.653 回答