Php 我想对一个数字中的所有数字求和

Php 我想对一个数字中的所有数字求和,php,numbers,add,digit,Php,Numbers,Add,Digit,我想把一个数字中的所有数字相加,如果它是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; }

我想把一个数字中的所有数字相加,如果它是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;
}   
试试这个:

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);    

} 

首先,我建议您学会将函数所执行的任务分开

如果要对数字的位数求和,可以先创建一个名为sum_digits的函数

然后,你可以做任何你需要做的事情

请参考Unninked的答案,这是个好答案。 这是完整的代码,再加上Unninked的答案

<?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;
}

?>
编辑:这是一个逻辑,可以分割一天,并将其相加

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;
}

你的问题不清楚,以下是我对你文章的理解。考试不是在倒退吗?当结果大于9时,您希望继续重复,是吗?在重复之前,您需要将$nday设置为$sday。感谢您的帮助。我刚开始学习php。如果在do-while循环中是11,22或33,是否可以返回总和?感谢您的帮助如果在do-while循环中是11,22或33,是否可以返回总和?先生,如果我的$day==994,那么我也想退出循环并显示像8885>8+8+5=29>2+9=11;我想表达一下11嗨,我以为$day只包含2位数字,因为它是day。哈哈。在这种情况下,您需要添加不同的逻辑。稍后我将帮助您,因为我现在仍在工作:.u r rit,但我还想用相同的函数求年和。如果你有时间,请帮助我。谢谢你的快速帮助啊,我明白了,好的,我会在下班后帮你:
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;
}