Получить сумму цифр в PHP

Как найти сумму всех цифр в числе в PHP?


person Leticia Meyere    schedule 12.07.2010    source источник


Ответы (11)


array_sum(str_split($number));

Это предполагает, что число положительное (или, точнее, преобразование $number в строку генерирует только цифры).

person Artefacto    schedule 12.07.2010
comment
Спасибо, это как безумно просто! - person Leticia Meyere; 13.07.2010
comment
Благодарю вас! Чем проще, тем лучше! Если вы не знаете, является ли число положительным или отрицательным, вы можете использовать функцию abs(), чтобы сделать его всегда положительным array_sum(str_split(abs($number))); - person imelgrat; 21.09.2016
comment
Забавно, как это получило более 70 голосов здесь, а на странице руководства по php за него проголосовали -40 см. здесь - person Manuel Mannhardt; 07.03.2018
comment
Он не только короче любого цикла, но и быстрее: в PHP нет целочисленного деления, поэтому решение с циклом должно на каждой итерации преобразовывать оставшееся число из числа с плавающей запятой в целое. - person Titus; 04.05.2018

Метод Artefactos явно непобедим, но вот вариант того, как можно было бы сделать это "вручную":

$number = 1234567890;
$sum = 0;
do {
    $sum += $number % 10;
}
while ($number = (int) $number / 10);

На самом деле это быстрее, чем метод Artefactos (по крайней мере, для 1234567890), потому что экономит два вызова функций.

person NikiC    schedule 12.07.2010
comment
что если $number = 12345678901234567890;? - person Shaiful Islam; 01.02.2015
comment
@ShaifulIslam как насчет этого? - person Adam; 15.05.2020

Другой способ, не такой быстрый, не простой в одну строку

<?php

    $n = 123;
    $nstr = $n . "";

    $sum = 0;
    for ($i = 0; $i < strlen($nstr); ++$i)
    {
        $sum += $nstr[$i];
    }
    echo $sum;

?>

Это также предполагает, что число положительное.

person BrunoLM    schedule 12.07.2010
comment
@Frank Farmer Efficiency не будет вычислять длину строки на каждой итерации: P - person alex; 22.12.2010
comment
Верно, но это все же лучше, чем строить целый массив через str_split. - person Frank Farmer; 12.01.2011

<?php 
// PHP program to calculate the sum of digits 
function sum($num) { 
    $sum = 0; 
    for ($i = 0; $i < strlen($num); $i++){ 
        $sum += $num[$i]; 
    } 
    return $sum; 
} 

// Driver Code 
$num = "925"; 
echo sum($num); 
?> 

Результат будет 9+2+5 = 16

person user2446600    schedule 20.04.2020
comment
Привет! Хотя этот код может решить проблему, включая объяснение того, как и почему это решает проблему, действительно поможет улучшить качество. вашего сообщения и, вероятно, приведет к большему количеству голосов. Помните, что вы отвечаете на вопрос для будущих читателей, а не только для того, кто задает сейчас. Пожалуйста, отредактируйте свой ответ, чтобы добавить пояснения и указать, какие ограничения и предположения применяются. - person Brian; 21.04.2020

Попробуйте следующий код:

<?php

$num = 525;
$sum = 0;

while ($num > 0)
{
    $sum= $sum + ($num % 10);
    $num= $num / 10;
}
echo "Summation=" . $sum;

?>
person Mayank Dudakiya    schedule 30.05.2015
comment
бесконечный цикл: $num станет кавычкой после первой цифры, отличной от 0. Попробуйте while ($num|0). И кстати: for(;$num|0;$num/=10)$sum+=$num%10; - person Titus; 04.05.2018

Если вас интересует регулярное выражение:

array_sum(preg_split("//", $number));
person itsazzad    schedule 07.09.2015

Предположим, вы хотите найти сумму цифр числа, скажем, 2395. Самым простым решением было бы сначала разделить цифры и найти сумму, а затем объединить все числа в одно число.

<?php
    $number=2;
    $number1=3;
    $number2=9;
    $number3=5;
    $combine=$number.$number1.$number2.$number3;
    $sum=$number+$number1+$number2+$number3;
    echo "The sum of $combine is $sum";
     ?>
person Chandan Baruah    schedule 05.01.2018

function addDigits($num) {

    if ($num % 9 == 0 && $num > 0) {
        return 9;
    } else {
          return $num % 9;
        }
    }

только О(n)

в LeetCode отправить результат: Время выполнения: 4 мс, быстрее, чем 92,86% онлайн-заявок PHP для Add Digits. Использование памяти: 14,3 МБ, менее 100,00% онлайн-заявок PHP на Add Digits.

person Aries    schedule 09.03.2020

Один из способов получить сумму цифр, однако это самый медленный маршрут.

$n=123;
while(($n=$n-9)>9);
echo "n: $n";
person manimaran vadivel    schedule 21.12.2019

Вот код. Пожалуйста, попробуйте это

   <?php 
    $d=0;
   $num=12345;

   $temp=$num;

   $sum=0;

   while($temp>1)

     {
      $temp=$temp/10;

        $d++;
         }

     echo "Digits Are : $d </br>";

      for (;$num>1;)

             {
              $d=$num%10;

             $num=$num/10;

             $sum=$sum+$d;

             }

           echo "Sum of Digits is : $sum";

   ?>
person user3353933    schedule 27.02.2014

person    schedule
comment
максимум 7 чисел с плавающей запятой - person stereoIII6; 19.08.2018