如何将字符串数组写入单个格式化的字符串中

时间:2011-12-29 01:47:07

标签: php arrays

我有一系列项目:

array(
    'apples',
    'oranges',
    'pineapples'
)

我想这样格式化:“我喜欢的一些水果是applesorangespineapples

所以,使用PHP我希望能够将该数组转换为读者友好的apples, oranges and pineapples

起初我以为我可以使用array_map,但我不知道如何判断最后和第二个项目是什么(添加,很容易在使用array_map的每个项目之后,您不希望在最后一个项目之前使用逗号

思想?

4 个答案:

答案 0 :(得分:4)

划分问题以征服它:取出最后一个元素,创建逗号分隔列表,然后添加最后一个元素。

$array = array(
    'apples',
    'oranges',
    'pineapples'
);

$last = array_pop($array);
echo implode(', ', $array), ' and ', $last; # apples, oranges and pineapples

当然,只有在数组中至少有两个值时才有意义。使用的函数:implodeDocs(在这种情况下可能比array_map更合适)和array_popDocs


另一方面,如果值不包含任何,,您可以先使用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是一个解决方案。

我可能最终会使用implodestrripossubstr_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,这实质上将数组转换为字符串