【问题标题】:How can I devote different separator for last item? [duplicate]如何为最后一项指定不同的分隔符? [复制]
【发布时间】:2016-03-26 13:33:08
【问题描述】:

我正在尝试从数组的元素创建一个字符串。这是我的数组:

$arr = array ( 1 => 'one',
               2 => 'two',
               3 => 'three',
               4 => 'four' );

现在我想要这个输出:

one, two, three and four

正如您在上面的输出中看到的,默认分隔符是,,最后一个分隔符是and


嗯,有两个 PHP 函数可以做到这一点,join()implode()。但是他们都不能接受最后一个不同的分隔符。我该怎么做?

注意:我可以这样做:

$comma_separated = implode(", ", $arr);
preg_replace('/\,([^,]+)$/', ' and $1', $comma_separated);

Online Demo


现在我想知道没有正则表达式有什么解决方案吗?

【问题讨论】:

  • 我的解决方案 (使用正则表达式) 有什么问题? ...实际上这是一个很好的问题,但我的解决方案有时会失败。当数组的最后一个值包含逗号时。

标签: php regex implode


【解决方案1】:

您可以使用 foreach 并构建自己的 implode();

function implode_last( $glue, $gluelast, $array ){
    $string = '';
    foreach( $array as $key => $val ){
        if( $key == ( count( $array ) - 1 ) ){
            $string .= $val.$gluelast;
        }
        else{
            $string .= $val.$glue;
        }
    }
    //cut the last glue at the end
    return substr( $string, 0, (-strlen( $glue )));
}

$array = array ( 1 => 'one',
           2 => 'two',
           3 => 'three',
           4 => 'four' );

echo implode_last( ', ', ' and ', $array );

如果您的数组以索引 0 开头,则必须设置 count( $array )-2

【讨论】:

    【解决方案2】:

    试试这个:

    $arr = array ( 1 => 'one',
               2 => 'two',
               3 => 'three',
               4 => 'four' );
    
    $first_three     = array_slice($arr, 0, -1); 
    $string_part_one = implode(", ", $first_three);  
    $string_part_two = end($arr);   
    
    echo $string_part_one.' and '.$string_part_two;  
    

    希望这会有所帮助。

    【讨论】:

    • 更易于使用array_popIMO:$last = array_pop($arr); echo implode(', ', $arr) . ' and ' . $last;
    猜你喜欢
    • 2012-12-21
    • 1970-01-01
    • 2013-01-31
    • 2017-11-09
    • 2015-06-06
    • 2017-01-11
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    相关资源
    最近更新 更多