Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/234.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 名词复数化的模块化方法_Php - Fatal编程技术网

Php 名词复数化的模块化方法

Php 名词复数化的模块化方法,php,Php,我想我们以前都遇到过这样的问题,应用程序说还有“1分钟”,或者类似的话。我认为这一观察结果证明了一个事实,即许多程序员忽略了这个问题 在我的项目中,我通常会按照以下思路来解释复数名词: $Count = count($Items); $Noun = 'minute'; if ($Count != 1) { $Noun .= 's'; } echo sprintf('There are %u %s remaining.', $Count, $Noun); 我对这种方法有几个问题: 每次

我想我们以前都遇到过这样的问题,应用程序说还有“1分钟”,或者类似的话。我认为这一观察结果证明了一个事实,即许多程序员忽略了这个问题

在我的项目中,我通常会按照以下思路来解释复数名词:

$Count = count($Items);
$Noun = 'minute';
if ($Count != 1)
{
    $Noun .= 's';
}

echo sprintf('There are %u %s remaining.', $Count, $Noun);
我对这种方法有几个问题:

  • 每次需要生成字符串时,程序员都有责任进行这种多重化检查,因此代码永远不能被重用
  • 它不必要地膨胀了应用程序代码并抑制了可读性
  • 它不是通用的。这个例子之所以有效,是因为“分钟”是“分钟”的复数。“羊”、“牛”或“真菌”呢

  • 有没有人对解决这个问题的通用、模块化方法有什么想法?我同意答案不止一个

    实现一个接受数字和所有单数和复数形容词的函数是很常见的

    因此,示例调用可能是

    echo 'There are ' $count . ' ' . pluralize($count, array('minute', 'minutes')) . ' remaining';
    
    如果您决定将应用程序翻译成多种语言,此链接将有助于正确实现多元化:


    ps:如果你通过额外的第三个参数
    language
    ,它将指定要使用的复数公式,那么我制作的propisal将适用于任何语言。

    我认为使用一般方法会过分强调性能,而不是这个小代码的有用性。为了实现一个通用的方法,你应该使用口述或类似的东西,这与好处相比确实是不必要的。也许更简单的一句话就是在性能和实用性之间进行正确的权衡

    $Count = count($Items);
    $Noun = 'minute';
    echo sprintf('There are %u %s(s) remaining.', $Count, $Noun);
    

    处理这个问题的一个简单方法是创建一个包含三个参数的函数:数字、单词的单数拼写和单词的复数拼写。该函数根据值返回单词的单数或复数版本。它仍然把责任推到程序员身上,但它比您在这里展示的内容更简洁。

    这些小东西正是让软件变得性感的原因。否则它只是一个没有多重化和正确的“他/她”用法的草图。@zerkms如果我们谈论做这种事情的美丽,我非常同意你。如果我们谈论的是在一个小型/中型软件中进行这种打印优化,我看不出有什么真正的好处。如果他决定为他的应用程序实现i18n呢?阿拉伯语有6种复数形式,因此函数需要接受6个参数,而不是2个。@zerkms,这是一个很好的观点。幸好你贴了一个解决这个问题的答案;-)感谢您提供了一个简单的解决方案以及一个理想的解决方案。我绝对认为这是正确的选择。