Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Copy Source | Copy HTML
- /**
- * @desc Функция получения русскоязычного варианта окончания для переданного числа
- * @param float $value Число, для которого надо подобрать окончание
- * @param array $names Массив имён вида [0]имя одного; [1]имя от 2 до 4; [2]имя 0 и от 5 до 20
- * @return string Возвращает соответствующее числу слово
- */
- function getNumberWord($value,$names){
- $temp = strval($value);
- $temp = $temp[utf8_strlen($temp)-1];
- return (($temp>1 and $temp <5 and (intval($value)>19 or intval($value)<10))?$names[1]:($temp==1?$names[0]:$names[2]));
- }
Nice guide — people should be able to recognise ternary operators even if they choose not to use them.
Copy Source | Copy HTMLдля меня выглядит так:return (($temp>1 and $temp <5
and (intval($value)>19 or intval($value)<10))
? $names[1]
: ($temp==1
? $names[0]
: $names[2]));Это просто для примера, обычно условия внутри тернарного оператора бывают длиннее, смотрится лучше.Copy Source | Copy HTML
- <?xml version="1.0" encoding="utf-8"?>
- <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
- <xsl:output method="xml" indent="no" encoding="utf-8" />
-
- <xsl:template name="words">
- <xsl:param name="count">0</xsl:param>
- <xsl:param name="wForm1" /> <!-- 1 предмет -->
- <xsl:param name="wForm2" /> <!-- 2 предмета-->
- <xsl:param name="wForm3" /> <!-- 10 предметов -->
-
- <xsl:variable name="final" select="number(substring($count, string-length($count)-1))" />
- <xsl:choose>
- <xsl:when test="$final mod 10 = 0">
- <xsl:value-of select="$wForm3" />
- </xsl:when>
- <xsl:when test="20 > $final and $final > 10">
- <xsl:value-of select="$wForm3" />
- </xsl:when>
- <xsl:when test="$final = 1 or $final mod 10 = 1">
- <xsl:value-of select="$wForm1" />
- </xsl:when>
- <xsl:when test="$final mod 10 > 4">
- <xsl:value-of select="$wForm3" />
- </xsl:when>
- <xsl:otherwise>
- <xsl:value-of select="$wForm2" />
- </xsl:otherwise>
- </xsl:choose>
- </xsl:template>
-
- </xsl:stylesheet>
/**
* Возвращает склонение числа
*
* @param integer $number
* @param array $titles - массив значений. Например, array("гривна", "гривны", "гривен")
* @return string
*/
function declOfNum( $number, $titles ) {
$cases = array( 2, 0, 1, 1, 1, 2 );
return $titles[ ( $number % 100 > 4 && $number % 100 < 20 ) ? 2 : $cases[ min( $number % 10, 5 ) ] ];
}
<?php
2 function smarty_modifier_sklon($n, $s1, $s2=NULL, $s5=NULL) // 1 нож 2 ножа 5 ножей
3 {
4 if($s2 === NULL)
5 list($s1, $s2, $s5) = explode(',', $s1);
6
7 $ns=intval(substr($n,-1));
8 $n2=intval(substr($n,-2));
9
10 if($n2>=10 && $n2<=19) return $s5;
11 if($ns==1) return $s1;
12 if($ns>=2&&$ns<=4) return $s2;
13 return $s5;
14 }
Русский без роботизма, часть 1