PHP从数组值形成字符串“ A,B,C和D”

|| 给定以下数组:
Array
(
    [143] => Car #1
    [144] => Car #2
    [145] => Car #3
)
我目前正在使用
implode(\', \', array_values($car_names))
生成一个像   汽车#1,汽车#2,汽车#3 我想得到一些类似的东西   1号,2号和3号汽车 这个想法是在数组的最后两个元素之间插入\“和\”。 如果数组恰好包含两个键/值对(例如,用户有2辆汽车),则不会有逗号。   1号车和2号车 并且如果数组包含一个键/值(例如,用户有1辆车)   1号车 任何建议如何做到这一点?我尝试使用
array_splice
,但是我不确定这是要走的路(即,将新元素插入数组)。 感谢您的帮助!     
已邀请:
        我想您可能想要这样,使用
array_pop
将最后一个元素移出数组末尾。然后,您可以内嵌数组的其余部分,并以自定义方式添加最后一个元素:
$last_value = array_pop($car_names);
$output = implode(\', \', array_values($car_names));
$output .= ($output ? \' and \' : \'\') . $last_value;
编辑:添加条件来检查数组是否只有一个元素。     
        
$last = array_pop($car_names);
echo implode(\', \', $car_names) . \' AND \' . $last;
    
        preg_replace只需将其交换为to6ѭ即可查找最后一条命令。
$yourString = preg_replace( \"/, ([\\w#]*)$/\", \"and \\1\", $yourString );
    
        该解决方案更长一些,但是已经针对所有阵列大小进行了测试,并且是一个完整的解决方案。另外,它不会像上面的答案那样修改数组,而是被分成一个函数。
function arrayToString($arr) {
    $count = count($arr);
    if ($count <= 2) {
        return implode(\' and \', $arr);
    }
    $result = \'\';
    $i = 0;
    foreach ($arr as $item) {
        if ($i) $result .= ($i == $count - 1) ? \' and \' : \', \';
        $result .= $item;
        $i++;
    }
    return $result;
}
具有丑陋格式的压缩版本,并且忽略了初始化变量的良好做法:
function arrayToString($arr) {
    if (count($arr) <= 2) return implode(\' and \', $arr);
    foreach ($arr as $item) {
        if ($i) $result .= ($i == count($arr) - 1) ? \' and \' : \', \';
        $result .= $item; $i++;
    }
    return $result;
}
    
        我不确定是否有内置函数,但是类似的东西应该可以工作。
$last = $car_names[count($car_names)-1];
$implodedString = implode(\', \', array_values($car_names))
$implodedString = str_replace(\", $last\", \"and $last\", $implodedString);
    
        这是上面我的评论中命名的函数的示例:
strrpos()
-查找子串在字符串中最后一次出现的位置
substr()
-返回字符串的一部分 和代码:
$text = implode(\', \', array_values($car_names));
$last = strrpos($text, \',\');
if ($last) $text = substr($text, 0, $last-1) . \' AND \' . substr($text, $last+1);
echo $text;
    
        您可以通过多种方法来执行此操作。这是另一个。
<?php
$cars = array(\'Car #1\', \'Car #2\', \'Car #3\', \'Car #4\');
$car = array(\'Car #1\');
$twocars = array(\'Car #1\', \'Car #2\');

function arrayToText($arr) {
    switch (count($arr)) {
    case 1:
        return $arr[0];
        break;
    case 2:
        return implode($arr, \' and \');
        break;
    default:
        $last = array_pop($arr);
        return implode($arr, \', \') . \' and \' . $last;
        break;
    }
}

echo \'<p>\' . arrayToText($cars) . \"</p>\\n\";
echo \'<p>\' . arrayToText($twocars) . \"</p>\\n\";
echo \'<p>\' . arrayToText($car) . \"</p>\\n\";
输出量
<p>Car #1, Car #2, Car #3 and Array</p>
<p>Car #1 and Car #2</p>
<p>Car #1</p>
    

要回复问题请先登录注册