duagfgfn1981 2011-12-29 01:47
浏览 48
已采纳

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

I have an array of items:

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

that I would like to format like so: "Some of my favorite fruits are apples, oranges and pineapples"

So, using PHP I would like to be able to transform that array into a reader friendly apples, oranges and pineapples.

At first I thought I might be able to use array_map but i'm not sure how I would go about telling what the last and 2nd to last items are (it's easy to add a , after each item with array_map, however you wouldn't want a comma before the last item)

Thoughts?

  • 写回答

4条回答 默认 最新

  • dsxi70423 2011-12-29 01:49
    关注

    Divide the problem to conquer it: Take out the last element, create the comma separated list and then add the last element.

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

    Naturally this only makes sense when there are at least two values in the array. Functions used: implodeDocs (probably more suitable than array_map in this case) and array_popDocs.


    On the other hand, if the values do not contain any , you can first create a comma separated string with the implode function and then use a regular expression to replace the last comma with and.

    That done will also work on arrays that have less than 2 elements. I do this in a loop that removes one element from the array in each step so that it shows how it behaves:

    $array = array(
        'apples',
        'oranges',
        'pineapples'
    );
    
    foreach($array as $v)
    {
        echo preg_replace('(,([^,]*)$)', ' and$1', implode(', ', $array)), "
    ";
        array_pop($array);
    }
    

    Output:

    apples, oranges and pineapples
    apples and oranges
    apples
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题