Сразу предупреждаю - у меня очень плохой код (надеюсь,пока что),ваша помощь будет заключаться не в том,чтобы скинуть мне ссылку на код с ООП,весь такой красивый,чтобы я ничего не понял,вы поможете если найдете решение именно в моем говнянном коде. Суть в том,что необходимо было написать программу,переводящую число до 1000 000 не включительно в текстовой вариант,соблюдая падежи и красоту,число вводится в сам код.Проблема в том,что у меня не получатся засунуть слова ОДНА и ДВЕ так,как нужно($jenskchisla-массив,не могу применить правильно),остальное (наверное) работает,помогите понять,как это сделать.
<?php
mb_internal_encoding('utf-8');
function Osnova($text)
{
$chisla= array ( 10 => 'десять', 100 => 'сто',
1 => 'один', 11 => 'одиннадцать', 20 => 'двадцать', 200 => 'двести',
2 => 'два', 12 => 'двенадцать', 30 => 'тридцать', 300 => 'триста',
3 => 'три', 13 => 'тринадцать', 40 => 'сорок', 400 => 'четыреста',
4 => 'четыре', 14 => 'четырнадцать', 50 => 'пятьдесят', 500 => 'пятьсот',
5 => 'пять', 15 => 'пятнадцать', 60 => 'шестьдесят', 600 => 'шестьсот',
6 => 'шесть', 16 => 'шестнадцать', 70 => 'семьдесят', 700 => 'семьсот',
7 => 'семь', 17 => 'семнадцать', 80 => 'восемьдесят', 800 => 'восемьсот',
8 => 'восемь', 18 => 'восемнадцать', 90 => 'девяносто', 900 => 'девятьсот',
9 => 'девять', 19 => 'девятнадцать' ,
);
$jenskchisla= array (
1 => 'одна' ,2 => 'две'
);
$bro=array(); // создаем массив под готовую строку
$text=str_split ($text,PREG_SPLIT_NO_EMPTY); // разделяем вводимый пользователем текст на массив
echo "<br><br>";
if ( count($text)==3 ){ // если колличество элементов массива равно 3 (значит сотни)
$kof=100; //задаем коэффициент на который нужно умножать чтобы получились сотни и десятки
for ($i=0;$i<count($text);$i++){ //цикл прохода по каждому элементу массива
$k=($text[$i]); //записываем элемент массива в переменную-ключ для соответствия с массивом чисел
$k=$k*$kof; //умножаем на коэфффиуиент
$kof=($kof*0.1); //изменяем коэффициент
$bro[$i]=$chisla[$k]; // записываем в новый массив слово из массива числен с соответствующим значением
}
$bro=implode(" ",$bro);// собираем итоговый массив слов в строку
}
if ( count($text)==2 ){ // если колличество элементов массива равно 3 (значит сотни)
$kof=10; //задаем коэффициент на который нужно умножать чтобы получились сотни и десятки
for ($i=0;$i<count($text);$i++){ //цикл прохода по каждому элементу массива
$k=($text[$i]); //записываем элемент массива в переменную-ключ для соответствия с массивом чисел
$k=$k*$kof; //умножаем на коэфффиуиент
$kof=($kof*0.1); //изменяем коэффициент
$bro[$i]=$chisla[$k]; // записываем в новый массив слово из массива числен с соответствующим значением
}
$bro=implode(" ",$bro);// собираем итоговый массив слов в строку
}
if ( count($text)==1 ){ // если колличество элементов массива равно 3 (значит сотни)
for ($i=0;$i<count($text);$i++){ //цикл прохода по каждому элементу массива
$k=($text[$i]); //записываем элемент массива в переменную-ключ для соответствия с массивом чисел
$bro[$i]=$chisla[$k]; // записываем в новый массив слово из массива числен с соответствующим значением
}
$bro=implode(" ",$bro);// собираем итоговый массив слов в строку
}
return $bro;
}
function PoTri($text){
if(($text)==0){
echo "Введен ноль";
end;
}
$result=strrev($text); // переворачиваем сроку
$result = str_split($result, 3); // разделяем эту строку по 3 элемента
foreach ($result as $key=>$value){
$result[$key]=strrev($result[$key]); //проходимся по массиву и переворачиваем каждый элемент
}
$reversed = array_reverse($result);
if(count($reversed)==2){ //если в массиве 2 числа
$a=Osnova($reversed[0]);// вызываем функцию озвучивания числа первого элемента
$c=Tis($reversed[0]); //вызываем функицю определения последнего элемента с добавлением тысячи
$b=Osnova($reversed[1]);// вызываем функцию озвучивания числа второго элемента
$rEZ=$a.' '.$c.' '.$b;
}
if(count($reversed)==1){ //если в массиве 1 числа
$b=Osnova($reversed[0]);// вызываем функцию озвучивания числа второго элемента
$rEZ=$b;
}
return $rEZ;
}
function Tis($t){
$v= str_split ($t,PREG_SPLIT_NO_EMPTY); //разделяем элемент массива на массив
$reversed1 = array_reverse($v); //переворачиваем массив
foreach ($reversed1 as $key=>$value){ //проходим по массиву и сравниваем первый элемент с числом,далее заканчиваем цикл
if (($reversed1[0]==0)||($reversed1[0]==5)||($reversed1[0]==6)||($reversed1[0]==7)||($reversed1[0]==8)||($reversed1[0]==9))
{
$t='тысяч';
}
if (($reversed1[0]==2)||($reversed1[0]==3)||($reversed1[0]==4))
{
$t='тысячи';
}
if ($reversed1[0]==1){
$t='тысяча';
}
end;
}
return $t;
}
$text='10000';
$b=PoTri($text);
echo " Введенный пользователем текст:$text <br>";
echo " На вашем счету: $b <br>";
`
Источник Habr
/**
* Возвращает сумму прописью
* @author runcore
* @uses morph(...)
*/
function num2str($num) {
$nul='ноль';
$ten=array(
array('','один','два','три','четыре','пять','шесть','семь', 'восемь','девять'),
array('','одна','две','три','четыре','пять','шесть','семь', 'восемь','девять'),
);
$a20=array('десять','одиннадцать','двенадцать','тринадцать','четырнадцать' ,'пятнадцать','шестнадцать','семнадцать','восемнадцать','девятнадцать');
$tens=array(2=>'двадцать','тридцать','сорок','пятьдесят','шестьдесят','семьдесят' ,'восемьдесят','девяносто');
$hundred=array('','сто','двести','триста','четыреста','пятьсот','шестьсот', 'семьсот','восемьсот','девятьсот');
$unit=array( // Units
array('копейка' ,'копейки' ,'копеек', 1),
array('рубль' ,'рубля' ,'рублей' ,0),
array('тысяча' ,'тысячи' ,'тысяч' ,1),
array('миллион' ,'миллиона','миллионов' ,0),
array('миллиард','милиарда','миллиардов',0),
);
//
list($rub,$kop) = explode('.',sprintf("%015.2f", floatval($num)));
$out = array();
if (intval($rub)>0) {
foreach(str_split($rub,3) as $uk=>$v) { // by 3 symbols
if (!intval($v)) continue;
$uk = sizeof($unit)-$uk-1; // unit key
$gender = $unit[$uk][3];
list($i1,$i2,$i3) = array_map('intval',str_split($v,1));
// mega-logic
$out[] = $hundred[$i1]; # 1xx-9xx
if ($i2>1) $out[]= $tens[$i2].' '.$ten[$gender][$i3]; # 20-99
else $out[]= $i2>0 ? $a20[$i3] : $ten[$gender][$i3]; # 10-19 | 1-9
// units without rub & kop
if ($uk>1) $out[]= morph($v,$unit[$uk][0],$unit[$uk][1],$unit[$uk][2]);
} //foreach
}
else $out[] = $nul;
$out[] = morph(intval($rub), $unit[1][0],$unit[1][1],$unit[1][2]); // rub
$out[] = $kop.' '.morph($kop,$unit[0][0],$unit[0][1],$unit[0][2]); // kop
return trim(preg_replace('/ {2,}/', ' ', join(' ',$out)));
}
/**
* Склоняем словоформу
* @ author runcore
*/
function morph($n, $f1, $f2, $f5) {
$n = abs(intval($n)) % 100;
if ($n>10 && $n<20) return $f5;
$n = $n % 10;
if ($n>1 && $n<5) return $f2;
if ($n==1) return $f1;
return $f5;
}
С версии 5.3 есть решение
$f = new NumberFormatter("ru", NumberFormatter::SPELLOUT);
echo $f->format(123456);// сто двадцать три тысяч четыреста пятьдесят шесть
Никак не могу разобраться как передать данные собранные с помощью Vuejs в php переменную
Что я не учёл для соблюдения безопасности при загрузки файла на сервер?