Php - вернуть count() словами

В моем коде есть следующее:

 $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 соответствующее натуральное число (удобочитаемое число) из массива? Или еще лучше - есть ли лучший способ сделать это?

(Я нашел некоторые функции или < href="http://www.techrepublic.com/article/converting-numbers-to-words-in-php/" rel="nofollow">классы, чтобы сделать именно это, но теперь это способ слишком раздут для простого случая, который мне нужен сейчас)

Теперь, конечно, я могу сделать это с помощью 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 - words и count() я нашел только ответы, связанные с подсчетом слов в строке)


person Obmerk Kronen    schedule 01.12.2013    source источник


Ответы (5)


Если это всего лишь несколько чисел:

$number = count($yournameit);
$count_words = array( "zero", "one" , "two", "three", "four" );
echo $count_words[$number];
person w00d    schedule 01.12.2013
comment
Это похоже на то, как это уже представляет ОП, со смещенными индексами, хотя в нем отсутствуют пять и шесть. (Я все еще проголосовал, потому что это показывает, как использовать указанный поиск.) - person user2864740; 01.12.2013
comment
ОП сказал, что не знает, как использовать .. так что вот оно - person w00d; 01.12.2013
comment
Это так просто, я смущен - наверное, я устал (все же 3 голоса против этого вопроса - это странно). - person Obmerk Kronen; 01.12.2013

У Pear есть пакет для числовых слов. Проверьте это pear Number_word

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

Это поможет вам

ИЗМЕНИТЬ

Вы можете использовать класс NumberFormatter в php.

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

Он выведет «Двести»

person Aryan    schedule 01.12.2013
comment
+1 Спасибо, я видел, но текущий сервер не поддерживает :-( - person Obmerk Kronen; 01.12.2013

Если вам нужно получить только 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

При желании вы можете проверить, определен ли индекс с помощью isset(), прежде чем пытаться echo его. Этот подход будет работать для чисел до 10. Однако он, очевидно, не будет работать для больших чисел, поскольку требует более сложных правил. Нелегко создать функцию, которая делает это в 10 или 20 строках кода. Я предлагаю вам использовать существующее решение вместо того, чтобы пытаться создать его с нуля. Взгляните на класс Number_Words PEAR.

person Amal Murali    schedule 01.12.2013
comment
Я думаю, вы неправильно поняли. Я хочу count(), но я хочу вывести результат в удобочитаемой форме. - person Obmerk Kronen; 01.12.2013
comment
Нет - И это указано в исходном вопросе - person Obmerk Kronen; 01.12.2013
comment
Спасибо. На самом деле, ИМХО, это более элегантно, и я уже адаптировал ответ @w00d для работы с моим (ассоциативным) массивом. Но поскольку я уже использовал ответ w00d, я бы не хотел его не принимать. Однако я ценю помощь хороших людей здесь :-). И эти ответы всегда оставляются для дальнейшего использования (это все, что касается SE). Спасибо еще раз - person Obmerk Kronen; 01.12.2013

Нет быстрого и простого способа добиться этого с помощью встроенной функции php, однако вы можете сделать это с помощью этого пакета pear: http://pear.php.net/package/Numbers_Words

person dmid    schedule 01.12.2013
comment
спасибо - не могу использовать из-за ограничений сервера :-( +1 - person Obmerk Kronen; 01.12.2013