functions.php 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <?php
  2. function fill($data = [], $count = 1){
  3. //$data = [];
  4. foreach ($data as $key => $value){
  5. if($key != 0) {
  6. unset($data[$key]);
  7. $data[$key - 1] = $value;
  8. }else unset($data[$key]);
  9. }
  10. for($i=0; $i<=$count-1; $i++){
  11. if(empty($data[$i])){
  12. $data[$i] = 0 ;
  13. }else $data[$i] *= 1 ;
  14. }
  15. ksort($data);
  16. return $data;
  17. }
  18. function fillCount($count = 1){
  19. $array = [];
  20. for($i=0; $i<=$count-1; $i++){
  21. $array[$i] = $i+1;
  22. }
  23. return $array;
  24. }
  25. function countDayInMonth($dataProvider){
  26. return cal_days_in_month(
  27. CAL_GREGORIAN,
  28. isset(explode('.', $dataProvider->month)[1]) ? explode('.', $dataProvider->month)[1] : 1,
  29. isset(explode('.', $dataProvider->month)[0]) ? explode('.', $dataProvider->month)[0] : 1
  30. );
  31. }
  32. /* @return \app\models\user*/
  33. function user()
  34. {
  35. return Yii::$app->user;
  36. }
  37. /* @return \app\models\User*/
  38. function identity($autorenew = false)
  39. {
  40. return Yii::$app->user->getIdentity($autorenew);
  41. }
  42. function getValue($data, $name, $default = null)
  43. {
  44. return \yii\helpers\ArrayHelper::getValue($data, $name, $default);
  45. }
  46. /**
  47. * Возвращает сумму прописью
  48. * @author mxuser
  49. * @uses morph(...)
  50. * @param float|int $num
  51. * @return string
  52. */
  53. function num2str($num)
  54. {
  55. $nul = 'ноль';
  56. $ten = array(
  57. array('', 'одна', 'дві', 'три', 'чотири', 'п\'ять', 'шість', 'сім', 'вісім', 'дев\'ять'),
  58. array('', 'одна', 'дві', 'три', 'чотири', 'п\'ять', 'шість', 'сім', 'вісім', 'дев\'ять'),
  59. );
  60. $a20 = array('десять', 'одинадцять', 'дванадцать', 'тринадцять', 'чотирнадцять', 'п\'ятнадцять', 'шістнадцять', 'сімнадцять', 'вісімнадцять', 'дев\'ятнадцять');
  61. $tens = array(2 => 'двадцять', 'тридцять', 'сорок', 'п\'ятьдесят', 'шістьдесят', 'сімдесят', 'вісімдесят', 'дев\'яносто');
  62. $hundred = array('', 'сто', 'двісті', 'триста', 'чотириста', 'п\'ятьсот', 'шістьсот', 'сімсот', 'вісімсот', 'дев\'ятьсот');
  63. $unit = array( // Units
  64. array('цент', 'цента', 'центів', 1),
  65. array('долар', 'долари', 'доларів', 0),
  66. array('тисяча', 'тисячі', 'тисяч', 1),
  67. array('мільйон', 'мільйони', 'мільйонів', 0),
  68. array('мільярд', 'мільярди', 'мільярдів', 0),
  69. );
  70. //
  71. list($rub, $kop) = explode('.', sprintf("%015.2f", floatval($num)));
  72. $out = array();
  73. if (intval($rub) > 0) {
  74. foreach (str_split($rub, 3) as $uk => $v) { // by 3 symbols
  75. if (!intval($v)) continue;
  76. $uk = sizeof($unit) - $uk - 1; // unit key
  77. $gender = $unit[$uk][3];
  78. list($i1, $i2, $i3) = array_map('intval', str_split($v, 1));
  79. // mega-logic
  80. $out[] = $hundred[$i1]; # 1xx-9xx
  81. if ($i2 > 1) $out[] = $tens[$i2] . ' ' . $ten[$gender][$i3]; # 20-99
  82. else $out[] = $i2 > 0 ? $a20[$i3] : $ten[$gender][$i3]; # 10-19 | 1-9
  83. // units without rub & kop
  84. if ($uk > 1) $out[] = morph($v, $unit[$uk][0], $unit[$uk][1], $unit[$uk][2]);
  85. } //foreach
  86. } else $out[] = $nul;
  87. $out[] = morph(intval($rub), $unit[1][0], $unit[1][1], $unit[1][2]); // rub
  88. $out[] = $kop . ' ' . morph($kop, $unit[0][0], $unit[0][1], $unit[0][2]); // kop
  89. return trim(preg_replace('/ {2,}/', ' ', join(' ', $out)));
  90. }
  91. function morph($n, $f1, $f2, $f5)
  92. {
  93. $n = abs(intval($n)) % 100;
  94. if ($n > 10 && $n < 20) return $f5;
  95. $n = $n % 10;
  96. if ($n > 1 && $n < 5) return $f2;
  97. if ($n == 1) return $f1;
  98. return $f5;
  99. }
  100. function app()
  101. {
  102. return \Yii::$app;
  103. }
  104. /* @return \app\components\Templater */
  105. function templater()
  106. {
  107. return app()->templater;
  108. }
  109. function DMF($val = ''){
  110. var_dump($val);
  111. die();
  112. }