Я хочу добавить все цифры в число, и если это 11,22, то я хочу отобразить только 11 или 22, иначе я хочу сделать его одной цифрой.
пример 30 = 3 + 0 = 3
28 = 2 + 8 = 10 = 1 + 0 = 1
я только что сделал кодбут, но есть ошибка
пожалуйста помоги.
<?php
$day = 17;
$month = 8;
$year = 1993;
function sumday($day)
{
if ($day == 11)
{
$sday = 11;
}
elseif ($day == 22)
{
$sday = 22;
}
elseif ($day == 29)
{
$sday = 11;
}
else
{
do {
$nday = $day . "";
$sday = 0;
for ($i = 0; $i < strlen($nday); ++$i)
{
$sday += $nday[$i];
}
while ($sday <=9);
}
return $sday;
}
please refer to unnikked's answer
хороший ответ.
И вот полный код в сочетании с ответом unnikked
<?php
$day = 17;
$month = 8;
$year = 1993;
function sumday($day)
{
if ($day == 11)
{
$sday = 11;
}
elseif ($day == 22)
{
$sday = 22;
}
elseif ($day == 29)
{
$sday = 11;
}
else{
$sday = $day;
do {
$sday = $sday % 10 + floor($sday/10);
} while ($sday >= 10);
}
return $sday;
}
?>
РЕДАКТИРОВАТЬ: Если вы хотите вернуть сумму, если она равна 11,22,33 в цикле while, то поместите условия в цикл while вместо использования условия else, это намного проще 🙂
function sumday($day)
{
$sday = $day;
while ($sday >= 10 && $sday != 11 && $sday != 22 && $sday != 29){
$sday = $sday % 10 + floor($sday/10);
}
return $sday;
}
РЕДАКТИРОВАТЬ: вот логика, которая может разделить день и сложить их
function sumday($day)
{
$sday = $day;
$arrday = str_split($sday); // split the day into array
$sumarrday = 0;
for($i = 0; $i < strlen((string)$sday); $i++){
$sumarrday = $sumarrday + $arrday[$i]; // sum the day from the array
}
$sday = $sumarrday;
// here you can modify the condition of while statement for your needs
// for example, if you want to return 29 when 29 shows up, add this to your condition, && $sday != 29
while ($sday >= 10){
$sday = $sday % 10 + floor($sday/10);
}
return $sday;
}
Прежде всего, я бы предложил вам научиться разделять задачи, которые выполняет функция.
Вы просите суммировать цифры числа, вы можете сначала создать функцию под названием sum_digits
<?php
function sum_digits($num) {
if ($num < 10)
return $num;
return $num % 10 + sum_digits(floor($num/10));
}
а затем с помощью условного сделать все, что вам нужно сделать.
Попробуй это:
else {
$nday = $day . ""; //moved out wrom loop
do {
$sday = 0;
for ($i = 0; $i < strlen($nday); ++$i)
{
$sday += $nday[$i];
}
$nday = $sday . ""; // you forget this line
while ($sday <=9);
}