2016-01-02 3 views
-1

Я хочу добавить все цифры в число, и если это 11,22, тогда я хочу отображать только 11 или 22, иначе я хочу сделать его одной цифрой. пример 30 = 3 + 0 = 3 28 = 2 + 8 = 10 = 1 + 0 = 1Я хочу суммировать всю цифру в числе

я только что сделал codebut это есть ошибка пожалуйста, помогите.

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

Ваш вопрос непонятен, вот моя догадка о том, что я интерпретировал ваш текст. https://eval.in/496369 – chris85

+0

Не тест в 'while' назад? Вы хотите продолжать повторять, когда результат больше 9, не так ли? – Barmar

+0

Перед повторением необходимо установить '$ nday' в' $ sday'. – Barmar

ответ

0

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

?> 

EDIT: Если вы хотите, чтобы вернуть сумму, если это 11,22,33 в то время цикла, а затем поставить условия, в то время цикла, а чем использование, если другое условие, это гораздо проще Тхо :)

function sumday($day) 
{ 
    $sday = $day; 
    while ($sday >= 10 && $sday != 11 && $sday != 22 && $sday != 29){ 
     $sday = $sday % 10 + floor($sday/10); 
    } 
return $sday; 
} 

EDIT: здесь логика, которая может разделить день и подвести их

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

Спасибо. отличная помощь – user752826

+0

можно ли вернуть сумму, если она равна 11,22 или 33 в цикле do while? – user752826

+0

да, это очень возможно, см. Мой отредактированный пост – Webster

-1

Попробуйте это:

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

} 
+0

Спасибо за вашу помощь – user752826

1

Прежде всего, я хотел бы предложить вам научиться разделять задачи, функции делать.

Вы спрашиваете суммировать цифры номера, вы можете сначала создать функцию, называемую sum_digits

<?php 

function sum_digits($num) { 
    if ($num < 10) 
     return $num; 
    return $num % 10 + sum_digits(floor($num/10)); 
} 

, а затем с помощью условного делать то, что вам нужно сделать.

+0

Благодарим за помощь. im new to php только начал учиться. – user752826

+0

можно ли вернуть сумму, если она равна 11,22 или 33 в цикле do while? – user752826

Смежные вопросы