我有一系列项目:
array(
'apples',
'oranges',
'pineapples'
)
我想这样格式化:“我喜欢的一些水果是apples
,oranges
和pineapples
”
所以,使用PHP
我希望能够将该数组转换为读者友好的apples, oranges and pineapples
。
起初我以为我可以使用array_map
,但我不知道如何判断最后和第二个项目是什么(添加,
很容易在使用array_map
的每个项目之后,您不希望在最后一个项目之前使用逗号
思想?
答案 0 :(得分:4)
划分问题以征服它:取出最后一个元素,创建逗号分隔列表,然后添加最后一个元素。
$array = array(
'apples',
'oranges',
'pineapples'
);
$last = array_pop($array);
echo implode(', ', $array), ' and ', $last; # apples, oranges and pineapples
当然,只有在数组中至少有两个值时才有意义。使用的函数:implode
Docs(在这种情况下可能比array_map
更合适)和array_pop
Docs。
另一方面,如果值不包含任何,
,您可以先使用implode
函数创建逗号分隔的字符串,然后使用正则表达式将最后一个逗号替换为{{ 1}}。
完成此操作也适用于少于2个元素的数组。我在一个循环中执行此操作,该循环在每个步骤中从数组中删除一个元素,以便它显示它的行为:
and
输出:
$array = array(
'apples',
'oranges',
'pineapples'
);
foreach($array as $v)
{
echo preg_replace('(,([^,]*)$)', ' and$1', implode(', ', $array)), "\n";
array_pop($array);
}
答案 1 :(得分:2)
好的,正如其他人评论implode
是一个解决方案。
我可能最终会使用implode
,strripos
和substr_replace
的组合:
$string = implode(', ', $fruit);
$pos = strripos($string, ', ');
echo substr_replace($string, ' and ', $pos, 2);
会产生apples, oranges and pineapples
。
如果我能想到一个解决方案,我很乐意发布一个更优雅的解决方案,但这是一种快速简便的方法来实现您需要的改变。
答案 2 :(得分:1)
你可以通过计算它们来知道哪一个是最后一个元素:
$array = array(
'apples',
'oranges',
'pineapples'
);
$count= count($array);
// because the key start from 0 , we must subtract 1
$lastKey= $count-1;
/// now u can do that
echo "<br>1st :".$array[0];
echo "<br>2nd :".$array[1];
echo "<br>3rd :".$array[2];
echo "<br>last:".$array[$lastKey];
// or same as u like
foreach($array as $key=>$value){
echo $value;
if($key == $lastKey){
echo ".";
}elseif($key == ($lastKey-1)){
echo " and ";
}else{
echo " , ";
}
}
答案 3 :(得分:0)
也许您正在寻找implode,这实质上将数组转换为字符串