2013-12-01 2 views
3

У меня есть следующие в моем коде:Php - подсчет возврата() в словах

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

(я нашел некоторые functions или classes делать только что - но теперь те слишком раздутой для простого случая мне нужно сейчас)

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

ответ

4

Если это только горстка номера:

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

Похоже, что ОП уже представляет его со сдвинутыми индексами - хотя у него отсутствуют «пять» и «шесть». (Я все еще не знаю, проголосовал за то, что он показывает * как * использовать этот поиск.) – user2864740

+0

OP сказал, что он не знал, как использовать .. так вот это – w00d

+0

Это так просто, я смущен - думаю, я устал (еще 3 пустые голоса по этому вопросу странные). –

5

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

+0

Я думаю, что вы missunderstood .. Я хочу 'COUNT() ', но я хочу, чтобы результат был получен с помощью человека, читаемого способом –

+0

Нет - И это изложено в оригинальном вопросе –

+0

Спасибо. Это на самом деле ИМХО более элегантно, и я уже адаптировал @ w00d ответ для работы с моим (ассоциативным) массивом. Но поскольку я уже использовал 'w00d' ответ, я не хотел бы его не принимать. Я все же ценю помощь хороших людей здесь :-). И эти ответы всегда оставляются для будущей справки (это все, что такое SE). Еще раз спасибо –

3

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

+0

спасибо - не могу использовать из-за ограничений сервера :-(+1 –

6

груша имеет пакет для числовых слов. Проверьте это pear Number_word

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

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

EDIT

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

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

Он будет выдавать «Двести»

+0

+1 Спасибо, я это видел, но текущий сервер не поддерживает :-( –

2

Пакет PEAR Numbers_Words предоставляет методы для написания цифр в словах.

Ссылка:

PEAR: 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 
Смежные вопросы