如何为最后一项投入不同的分隔符?

时间:2016-03-26 13:33:08

标签: php regex implode

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

$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

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

2 个答案:

答案 0 :(得分: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;  

希望这有帮助。

答案 1 :(得分:2)

您可以使用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