【问题标题】:Php - return count() in wordsphp - 以单词返回 count()
【发布时间】:2013-12-01 05:46:48
【问题描述】:

我的代码中有以下内容:

 $my_count = count($total_elements[$array_object]);

$my_count 现在包含$total_elements[$array_object] 中的元素数。我想把这个数转换成它对应的自然数(零,一,二,...)

在这种特定情况下,我只有 5 个数字

$numbers  = array(
    2  => 'two',
    3  => 'three',
    4  => 'four',
    5  => 'five',
    6  => 'six',
);

如何获取给定数组中的元素个数,然后echo从数组中获取对应的自然数(人类可读数)?或者更好 - 有没有更好的方法来做到这一点?

(我找到了一些 functionsclasses 来做到这一点 - 但现在这些对于我现在需要的简单案例来说太臃肿了)

现在,我当然可以用switch() 做到这一点:

switch ($my_count) {
    case 0:
        echo "zero";
        break;
    case 1:
        echo "one";
        break;
    case 2:
        echo "two";
        break;
      // etc...
}

但它对我来说看起来并不优雅。如果一个数字超过 10 个,也很愚蠢。

我确信有一种更优雅的方法可以实现这一点,即使现在我只有 5 个数字,我也希望有一些函数可以在其他情况下重复使用。

(如果这是一个愚蠢的问题,我很抱歉 - 但是 - 在 SE 或 Google 上搜索关键字 PHP - wordscount() 我只找到了与计算字符串中的单词相关的答案)

【问题讨论】:

    标签: php count words human-readable


    【解决方案1】:

    Pear 有一个数字词包。 看看这个pear Number_word

    $numbers = new Number_Words();
    echo $number->toWords(200);
    

    它会帮助你

    编辑

    你可以在php中使用NumberFormatter类。

    $f = new NumberFormatter("en", NumberFormatter::SPELLOUT);  
    echo $f->format(200);
    

    它会输出“两百”

    【讨论】:

    • +1 谢谢,我看到了,但当前服务器不支持:-(
    【解决方案2】:

    如果您只需要检索 5 个数字,当前的方法就可以了。创建一个关联数组,其中包含数字作为键,对应的单词作为值:

    $numberArray  = array(
        0  => 'zero',
        1  => 'one',
        2  => 'two',
        3  => 'three',
        4  => 'four',
        5  => 'five',
        6  => 'six',
        // ...
    );
    

    现在,检索与$my_count 对应的单词:

    $my_count = 2;
    echo $numberArray[$my_count]; // => two
    

    在尝试echo 之前,您可以选择检查索引是否使用isset() 定义。这种方法适用于最多 10 的数字。但是,这显然不适用于更大的数字,因为它需要更复杂的规则。用 10 或 20 行代码创建一个函数并不容易。我建议您使用现有的解决方案,而不是尝试从头开始创建一个。看看Number_Words PEAR class

    【讨论】:

    • 我想你误解了 .. 我确实想要 count() 但我想以人类可读的方式输出结果
    • 否 - 在原始问题中已说明
    • 谢谢 - 事实上,恕我直言,它更优雅,我已经调整了@w00d 答案以使用我的(关联)数组。但是由于我已经使用了w00d 答案,我不想不接受它。但是,我确实感谢这里的好人的帮助:-)。这些答案总是留作将来参考(这就是 SE 的全部内容)。再次感谢
    【解决方案3】:

    如果只是少数几个:

    $number = count($yournameit);
    $count_words = array( "zero", "one" , "two", "three", "four" );
    echo $count_words[$number];
    

    【讨论】:

    • 这看起来就像 OP 已经呈现的那样,带有移位的索引 - 尽管它缺少“五”和“六”。 (我仍然投了赞成票,因为它显示了如何使用所述查找。)
    • OP说他不知道怎么用..所以这里是
    • 这太简单了,我很尴尬 - 我想我累了(不过,这个问题的 3 票反对很奇怪)。
    【解决方案4】:

    使用内置 php 函数没有快速简便的方法来实现这一点,但是您可以使用这个 pear 包来做到这一点:http://pear.php.net/package/Numbers_Words

    【讨论】:

    • 谢谢 - 由于服务器限制无法使用 :-( +1
    【解决方案5】:

    PEAR Numbers_Words 包提供了在单词中拼写数字的方法。

    参考:

    梨:http://pear.php.net/package/Numbers_Words

    PECL:http://php.net/manual/en/numberformatter.format.php

    示例:

    echo number_to_word( '2281941596' );
    
    //Sample output - number_to_word
    Two Billion, Two Hundreds Eighty One Million, Nine Hundreds Forty One Thousand and Five Hundreds Ninety Six
    
    //Sample output - PEAR Class
     two billion two hundred eighty-one million nine hundred forty-one thousand five hundred ninety-six
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-11
      • 2017-11-11
      • 1970-01-01
      相关资源
      最近更新 更多