根据给定的函数参数的长度,正确连接字符或单词

时间:2016-09-08 10:46:35

标签: php arrays loops arguments

在我创建的这个简单示例中,根据赋给showArgs函数的参数长度插入相应的连接字符和单词。如果给出两个参数,则连接词将为“和”,从而导致输出“一和二”。但第三个回声有一个问题。如果给出3个或更多个参数,它将用逗号连接,并且最后一个元素应该以'和'为前缀,结果为“一,二和三”。我的代码显示不同,只有逗号:“一,二,三”。

function showArgs(...$args) {
    $argsArray = [];
    $say = 'Argument(s) => ';

    foreach($args as $arg) {
        array_push($argsArray, $arg);
    }

    if(count($argsArray) == 2) {
        $say .= implode(' and ', $argsArray);
    } elseif(count($argsArray) <= 3) {
        $say .= implode(', ', $argsArray);
    } elseif (count($argsArray) == end($argsArray)) {
        $say .= implode(' and ', end($argsArray));
    }

    return $say;
}

// First echo
echo showArgs('one');

echo "<br>";

// Second echo
echo showArgs('one','two');

echo "<br>";

// Third echo
echo showArgs('one','two','three'); // Supposed to be one, two, and three

有人可以帮我解决这个问题吗?非常感谢提前。

1 个答案:

答案 0 :(得分:1)

你的最后一个条件没有意义:你正在将数组中的元素数量与数组的最后一个元素进行比较 - 一个字符串。

您的算法的一个简单解决方案是将所有元素排除在最后一个元素之外,并手动添加最后一个元素。

类似于:

if (count($argsArray) === 1) {
    // You can do this directly at the top of your function as well
    return reset($argsArray);    
} else {
    // at least 2 arguments, if 0 arguments can be given, you need to handle this separately
    return implode(', ', array_slice($argsArray, 0, -1)) . ' and ' . end($argsArray);                                             
}