Скрипт declension формирует склонение на основании установленных правил и входящих данных. Настройки могут использоваться много раз в течении жизни скрипта.
<?php
require_once ('declension.inc');
Возможности скрипта
<?php
mdec::addRule('слово в И.п., ед.ч.', 'падеж', array(
// случаи
0=>'слов', // возвращается если число = 0
1=>'слово', // возвращается если число заканчивается на 1 (исключение 11/111/...)
2=>'слова', // возвращается если число заканчивается на 2/3/4 (исключение если число заканчивается на 12/13/14)
3=>'слов' // возвращается в остальных случаях и исключениях
));
// Пример
mdec::addRule('пример','и',array(0=>'примеров',1=>'пример',2=>'примера',3=>'примеров'));
// или тоже самое
mdec::addRule('пример','и',array(1=>'пример',2=>'примера','other'=>'примеров'));
Множественная установка правил
<?php
mdec::addRules(array(
'слово в И.п., ед.ч.'=>array(
'Именительный падеж'=>array(/*случаи*/),
'Родительный падеж'=>array(/*случаи*/),
// ...
)
));
// Пример
mdec::addRules(array(
'пример'=>array(
'и'=>array( 0=>'примеров', 1=>'пример', 2=>'примера', 3=>'примеров' ),
'р'=>array( 0=>'примеров', 1=>'примера', 2=>'примеров', 3=>'примеров' ),
'д'=>array( 0=>'примеров', 1=>'примеру', 2=>'примерам', 3=>'примеров' ),
'в'=>array( 0=>'примеров', 1=>'пример', 2=>'примера', 3=>'примеров' ),
'т'=>array( 0=>'примерами', 1=>'примером', 2=>'примерами', 3=>'примерами' ),
'п'=>array( 0=>'примерах', 1=>'примере', 2=>'примерах', 3=>'примерах' ),
)
));
Получение списка установленных правил
<?php
mdec::getRules();
Получение правил для определенного слова
<?php
mdec::getRules('пример'[,'склонение']);
Использование скрипта. Получение склонения
<?php
mdec::get(array(
'num' => numeric, // число для которого будет склоняться слово
'word' => string, // склоняемое слово
'case' => string, // падеж
'function' => string, // callback. В эту функцию будут переданы слоненные и отформатированные, но не темизированные данные
'default' => mixed, // число возвращаемое при неверных входящих данных или если число = (0,null,false)
'is_reverse' => boolean, // метка, обозначающая возвращение слоненного слова с числом в обратном порядке. Прямой порядок: "число слово", обратный "слово число".
'is_float' => boolean, // метка, обозначающая, что необходимо вернуть число с плавающей точкой (если оно было во входящих данных)
'is_split' => boolean, // метка, обозначающая, что необходимо разбить число на ранги (пример: 1 000 000)
// темизация
'prefix' => scalar, // префикс возвращаемого значения
'suffix' => scalar, // суффикс возвращаемого значения
'num_prefix' => scalar, // префикс возвращаемого числа
'num_suffix' => scalar, // суффикс возвращаемого числа
'word_prefix' => scalar, // значение стоящее перед возвращаемым словом
'word_suffix' => scalar, // значение стоящее после возвращаемого слова
));
// Примеры
mdec::get(array( 'num'=>1, 'word'=>'пример' )); // 1 пример
mdec::get(array( 'num'=>2, 'word'=>'пример' )); // 2 примера
mdec::get(array( 'num'=>5, 'word'=>'пример' )); // 5 примеров
mdec::get(array( 'num'=>101, 'word'=>'пример' )); // 101 пример
mdec::get(array( 'num'=>100222, 'word'=>'пример' )); // 100222 примера
mdec::get(array( 'num'=>100222, 'word'=>'пример', 'is_split'=>true )); // 100 222 примера
mdec::get(array( 'num'=>100222.15, 'word'=>'пример', 'is_split'=>true )); // 100 222 примера
mdec::get(array( 'num'=>100221.15, 'word'=>'пример', 'is_split'=>true, 'is_float'=>true )); // 100 221.15 примера
mdec::get(array( 'num'=>0, 'word'=>'пример' )); // 0 примеров
mdec::get(array( 'num'=>0, 'word'=>'пример', 'default'=>'нет' )); // нет
mdec::get(array( 'num'=>15.6, 'word'=>'пример', 'is_float'=>true )); // 15.6 примера
mdec::get(array( 'num'=>1.10, 'word'=>'пример', 'is_float'=>true )); // 1.1 примера
mdec::get(array( 'num'=>94.05, 'word'=>'пример', 'is_float'=>true )); // 94.05 примера
mdec::get(array( 'num'=>1, 'word'=>'пример', 'is_reverse'=>true )); // пример 1
mdec::get(array( 'num'=>1, 'word'=>'пример', 'case'=>'д' )); // 1 примеру
mdec::get(array( 'num'=>2, 'word'=>'пример', 'case'=>'д' )); // 2 примерам