Всем доброго времени суток. Кто сможет помочь? Пытаюсь сделать замену окончания слова в зависимости от числа. Написал код, но он очень большой и ограничивается количеством цифр. Подскажите как можно его упростить? Сам код: Код (Text): <?PHP if($user_data["a_t"] == 1){ $vash = "их"; $kur = "ица"; $dal = "а"; $cip = "нка";} if($user_data["a_t"] > 1 and $user_data["a_t"] < 5 or $user_data["a_t"] > 21 and $user_data["a_t"] < 25 or $user_data["a_t"] > 31 and $user_data["a_t"] < 35 or $user_data["a_t"] > 41 and $user_data["a_t"] < 45 or $user_data["a_t"] > 51 and $user_data["a_t"] < 55 or $user_data["a_t"] > 61 and $user_data["a_t"] < 65 or $user_data["a_t"] > 71 and $user_data["a_t"] < 75 or $user_data["a_t"] > 81 and $user_data["a_t"] < 85 or $user_data["a_t"] > 91 and $user_data["a_t"] < 95){ $vash = "и"; $kur = "ицы"; $dal = "и";} if($user_data["a_t"] > 4 and $user_data["a_t"] < 21 or $user_data["a_t"] == 0 or $user_data["a_t"] > 24 and $user_data["a_t"] < 31 or $user_data["a_t"] > 35 and $user_data["a_t"] < 41 or $user_data["a_t"] > 44 and $user_data["a_t"] < 51 or $user_data["a_t"] > 55 and $user_data["a_t"] < 61 or $user_data["a_t"] > 64 and $user_data["a_t"] < 71 or $user_data["a_t"] > 75 and $user_data["a_t"] < 81 or $user_data["a_t"] > 84 and $user_data["a_t"] < 91 or $user_data["a_t"] > 95 and $user_data["a_t"] < 101){ $vash = "их"; $kur = "ей"; $dal = "и";} if($user_data["a_t"] == 21 or $user_data["a_t"] == 31 or $user_data["a_t"] == 41 or $user_data["a_t"] == 51 or $user_data["a_t"] == 61 or $user_data["a_t"] == 71 or $user_data["a_t"] == 81 or $user_data["a_t"] == 91){ $vash = "их"; $kur = "ица"; $dal = "и";} ?> Как использую переменную: Код (Text): Ваш<?=$vash; ?> кур<?=$kur; ?> дал<?=$dal; ?> цыпл<?=$cip; ?> Заранее спасибо
Рекомендую посмотреть как решают проблему глобально Вот например версия gettext с возможностью выбора окончаний: https://php.ru/manual/function.ngettext.html Пример использования https://gist.github.com/fomigo/2382775 Код (PHP): <?php /* echo plural_form(42, array('арбуз', 'арбуза', 'арбузов')); */ function plural_form($n, $forms) { return $n%10==1&&$n%100!=11?$forms[0]:($n%10>=2&&$n%10<=4&&($n%100<10||$n%100>=20)?$forms[1]:$forms[2]); }
Спасибо за ответ. Я начинающий в php. Находил что то похожие в поиске, пробовал подставлять свои переменные, но к сожалению не получилось внедрить. Если Вам не тяжело, не могли бы для ясности подставить мои переменные, чтоб я разобрался что к чему?
@ushkom ну это совсем издевательство. А голову включить? Код (PHP): <?php echo plural_form(13, array('ваш', 'ваши', 'ваших')); echo plural_form(13, array('курица', 'курицы', 'куриц')); echo plural_form(13, array('дала', 'дали', 'дали'));
Причем издевательство, я спрашивал о переменных. Вот строчка, точнее формула return $n%10==1&&$n%100!=11?$forms[0]$n%10>=2&&$n%10<=4&&($n%100<10||$n%100>=20)?$forms[1]:$forms[2]); $n я так понял, это мое число, то есть $user_data["a_t"]. И можно сделать так echo $vash = plural_form(13, array('ваш', 'ваши', 'ваших')); А в коде использовать так <?=$vash; ?>
Я сделал так $n = $user_data["a_t"]; function plural_form($n, $forms) { return $n%10==1&&$n%100!=11?$forms[0]$n%10>=2&&$n%10<=4&&($n%100<10||$n%100>=20)?$forms[1]:$forms[2]); } echo $vash = plural_form(13, array('Ваш', 'Ваши', 'Ваших')); echo $kur = plural_form(13, array('курица', 'курицы', 'куриц')); echo $dal = plural_form(13, array('дала', 'дали', 'дали')); echo $cip = plural_form(13, array('цыплят', 'цыпленка', 'цыплят')); Но к сожалению не работает И если мне нужно для разных цифр сделать, можно их вставить в одну формулу?
@ushkom Вы просили упростить? Пожалуйста, вот вам код. Нужно для любых чисел, опять-таки пожалуйста что значит не работает? Можете описать что это выводит на экран и что вы ожидаете?
Выводит, но не склоняет слова Вот сфотографировал http://prntscr.com/d5m5wz Сам код Код (Text): if(isset($_POST["lvlup"])){ if($storesprice <= $user_data["money_b"]){ if ($storesprice > 0){ $db->Query("UPDATE db_users_b SET money_b = money_b - $storesprice, lv_store = lv_store + col_sklad, col_sklad = col_sklad + 2, ul_store = $storesprice WHERE id = '$usid' LIMIT 1"); echo "<span class='msgbox-good'><b>Уровень склада был улучшен!</b></span><BR />"; $db->Query("SELECT * FROM db_users_b WHERE id = '$usid' LIMIT 1"); $user_data = $db->FetchArray(); }else echo "<div class='alert' id='error'><b style='font-size: 14px;'>Ошибка! Попробуйте улучшить склад снова</b></div><BR /><BR />"; }else echo "<div class='alert' id='error'><b style='font-size: 14px;'>Недостаточно золотых для улучшения</b></div><BR /><BR />"; } # Окончание для курей $n = $user_data["a_t"]; function plural_form($n, $forms) { return $n%10==1&&$n%100!=11?$forms[0]:($n%10>=2&&$n%10<=4&&($n%100<10||$n%100>=20)?$forms[1]:$forms[2]); } echo $vash = plural_form(13, array('Ваш', 'Ваши', 'Ваших')); echo $kur = plural_form(13, array('курица', 'курицы', 'куриц')); echo $dal = plural_form(13, array('дала', 'дали', 'дали')); echo $cip = plural_form(13, array('цыплят', 'цыпленка', 'цыплят')); ?> <div class="fr-block1"> <form action="" method="post"> <div class="cl-fr-lf1"> <img src="/img/birds/ciplenok.png" /> </div> <div class="cl-fr-rg1" style="padding-left:20px;"> <div class="fr-te-gr1"><?=$vash; ?> <font color="#000000"><?=$user_data["a_t"]; ?></font> <?=$kur; ?> <?=$dal; ?>: <font color="#000000"><?=$func->SumCalc($sonfig_site["a_in_h"], $user_data["a_t"], $user_data["last_sbor"]);?> <?=$cip; ?></font></div> <input type="hidden" name="item" value="1" /> </div> </form> </div> Спасибо Вам за терпение и помощь