How do I find the sum of all the digits in a number in PHP?
mickmackusa
43.1k12 gold badges80 silver badges132 bronze badges
asked Jul 12, 2010 at 21:44
array_sum(str_split($number));
This assumes the number is positive (or, more accurately, that the conversion of $number
into a string generates only digits).
answered Jul 12, 2010 at 21:47
ArtefactoArtefacto
96k17 gold badges200 silver badges225 bronze badges
3
Artefactos method is obviously unbeatable, but here an version how one could do it «manually»:
$number = 1234567890;
$sum = 0;
do {
$sum += $number % 10;
}
while ($number = (int) ($number / 10));
This is actually faster than Artefactos method (at least for 1234567890
), because it saves two function calls.
answered Jul 12, 2010 at 22:01
NikiCNikiC
100k37 gold badges190 silver badges225 bronze badges
3
Another way, not so fast, not single line simple
<?php
$n = 123;
$nstr = $n . "";
$sum = 0;
for ($i = 0; $i < strlen($nstr); ++$i)
{
$sum += $nstr[$i];
}
echo $sum;
?>
It also assumes the number is positive.
answered Jul 12, 2010 at 21:53
BrunoLMBrunoLM
97.2k83 gold badges294 silver badges450 bronze badges
2
function addDigits($num) { if ($num % 9 == 0 && $num > 0) { return 9; } else { return $num % 9; } }
only O(n)
at LeetCode submit result:
Runtime: 4 ms, faster than 92.86% of PHP online submissions for Add Digits.
Memory Usage: 14.3 MB, less than 100.00% of PHP online submissions for Add Digits.
answered Mar 9, 2020 at 9:00
AriesAries
312 bronze badges
0
<?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);
?>
Result will be 9+2+5 = 16
answered Apr 20, 2020 at 23:57
1
Try the following code:
<?php
$num = 525;
$sum = 0;
while ($num > 0)
{
$sum= $sum + ($num % 10);
$num= $num / 10;
}
echo "Summation=" . $sum;
?>
kenorb
153k85 gold badges674 silver badges738 bronze badges
answered May 30, 2015 at 19:03
2
If interested with regex:
array_sum(preg_split("//", $number));
answered Sep 7, 2015 at 3:56
itsazzaditsazzad
6,8397 gold badges69 silver badges87 bronze badges
<?php
echo"----Sum of digit using php----";
echo"<br/ >";
$num=98765;
$sum=0;
$rem=0;
for($i=0;$i<=$num;$i++)
{
$rem=$num%10;
$sum=$sum+$rem;
$num=$num/10;
}
echo "The sum of digit 98765 is ".$sum;
?>
-----------------Output-------------
----Sum of digit using php----
The sum of digit 98765 is 35
answered Jul 13, 2018 at 20:14
// math before code
// base of digit sums is 9
// the product of all numbers multiplied by 9 equals 9 as digit sum
$nr = 58821.5712; // any number
// Initiallization
$d = array();
$d = explode(".",$nr); // cut decimal digits
$fl = strlen($d[1]); // count decimal digits
$pow = pow(10 ,$fl); // power up for integer
$nr = $nr * $pow; // make float become integer
// The Code
$ds = $nr % 9; // modulo of 9
if($ds == 0) $ds=9; // cancel out zeros
echo $ds;
scopchanov
7,84610 gold badges40 silver badges68 bronze badges
answered Aug 19, 2018 at 14:42
1
Assume you want to find the sum of the digits of a number say 2395 the simplest solution would be to first split the digits and find out the sum then concatenate all the numbers into one single number.
<?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";
?>
answered Jan 5, 2018 at 7:29
One way of getting sum of digit however this is a slowest route.
$n=123;
while(($n=$n-9)>9);
echo "n: $n";
cfnerd
3,57812 gold badges32 silver badges44 bronze badges
answered Dec 21, 2019 at 11:30
<html>
<head>
<title>detail</title>
</head>
<body>
<?php
$n = 123;
$sum=0; $n1=0;
for ($i =0; $i<=strlen($n);$i++)
{
$n1=$n%10;
$sum += $n1;
$n=$n/10;
}
echo $sum;
?>
</body>
</html>
answered May 7, 2013 at 16:19
Here’s the code.. Please try this
<?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";
?>
answered Feb 27, 2014 at 3:55
Если есть число, то что бы получить масисв символов, пхп вначале приведёт тип к строке, а потом берём символ и опять приводим к числу что бы получить сумму.
Эта же задача используется и для обучения в с, с++, паскале, вы и там будете переводить числа в строку и обратно? Я бы не стал А так как задача не жизненая, а для обучения составления алгоритмов, мне кажется деление уместнее всего
Но это по моему мнению, я не знаю что на уме у того кто её задавал. И я считал бы правильным способом как раз деление. И я уверен что деление будет в разы быстрей работать
Добавлено через 1 минуту
Сообщение от KOPOJI
тем более, если «заданное число» задается через форму — то приходит оно строкой, а не числом
Я ж говорю, забудьте о пхп на мгновение, и подойдите с точки зрения обучения программированию в общем, и обратите внимание на слово число
Подскажите, как сложить сумму чисел введенного пользователем? К примеру 534 должно быть 12
задан 15 ноя 2016 в 8:30
2
2 ответа
Как вариант можно так:
echo array_sum(str_split('534'));
ответ дан 15 ноя 2016 в 9:28
0
function sumInt($var) {
$var = strval($var);
$sum = 0;
for ($i = 0; $i < strlen($var); $i++) {
$sum += (int)$var[$i];
}
return $sum;
}
$sum = sumInt(534);
ответ дан 15 ноя 2016 в 8:39
Apo-SApo-S
2,26711 серебряных знаков24 бронзовых знака
За последние 24 часа нас посетили 11054 программиста и 939 роботов. Сейчас ищут 706 программистов …
-
- С нами с:
- 13 май 2020
- Сообщения:
- 2
- Симпатии:
- 0
Здравствуйте! Являюсь новичком. Решал задачи из задачника Григорьева https://codernet.ru/books/php/zadachnik_po_php_s_resheniyami/
Стр. 3. Задача первая сверху: «Дано трехзначное числа. Найдите сумму его цифр.»1. <?php
2. $var = 578; // Объявляем число
3. $var .= ‘ ; // Приводим его к строковому типу
4. echo $a = $var[2] + $var[1] + $var[0]; // Выводим переменную равную сумме цифр числа
5. ?>Перепечатал программу в редактор. Выдаёт ошибку. Стал искать. Я новичок, поэтому стал тупо подбирать символы, не зная, где, собственно ошибка. Нашел ошибку. Оказывается, прога работает, если её записать так:
3. $var .= ‘ ‘ ; // т.е. автор ошибся, не поставив вторую одинарную кавычку.
Но!
Вопрос в другом: объясните, пожалуйста, для чего нужна точка перед знаком =?
Не могу нигде найти материал по этому вопросу. Поясните, пожалуйста. -
Artur_hopf
Активный пользователь- С нами с:
- 7 май 2018
- Сообщения:
- 2.266
- Симпатии:
- 405
-
Valick
Активный пользователь- С нами с:
- 12 авг 2018
- Сообщения:
- 1.911
- Симпатии:
- 328
@igorich76 , для того, что бы переходить к практике и решать задачи необходимо для начала выучить теорию.
В любом учебнике по РНР. РНР слаботипизированный язык программирования, точка (как и любая другая операция) перед знаком равно — это операция конкатенации применённая «к самому себе». Т.е.
-
$var .= ‘ ‘; равно $var = $var . ‘ ‘;
В итоге $var из integer превращается в string.
@igorich76 , бросай заниматься хернёй, просто возьми и прочти хотя бы одну книгу по РНР от корки до корки.
8 ответов
array_sum(str_split($number));
Это предполагает, что число положительно (или, точнее, преобразование $number
в строку генерирует только цифры).
Artefacto
12 июль 2010, в 22:56
Поделиться
Метод Artefactos, безусловно, непревзойден, но здесь версия, как можно было бы сделать это «вручную»:
$number = 1234567890;
$sum = 0;
do {
$sum += $number % 10;
}
while ($number = (int) $number / 10);
Это быстрее, чем метод Artefactos (по крайней мере, для 1234567890
), поскольку он сохраняет два вызова функций.
NikiC
12 июль 2010, в 23:21
Поделиться
Другой способ, не так быстро, а не простая строка
<?php
$n = 123;
$nstr = $n . "";
$sum = 0;
for ($i = 0; $i < strlen($nstr); ++$i)
{
$sum += $nstr[$i];
}
echo $sum;
?>
Он также предполагает, что число положительно.
BrunoLM
12 июль 2010, в 22:27
Поделиться
Предположим, что вы хотите найти сумму цифр числа, скажем, 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";
?>
Chandan Baruah
05 янв. 2018, в 07:58
Поделиться
Если вас интересует регулярное выражение:
array_sum(preg_split("//", $number));
itsazzad
07 сен. 2015, в 05:44
Поделиться
<html>
<head>
<title>detail</title>
</head>
<body>
<?php
$n = 123;
$sum=0; $n1=0;
for ($i =0; $i<=strlen($n);$i++)
{
$n1=$n%10;
$sum += $n1;
$n=$n/10;
}
echo $sum;
?>
</body>
</html>
user2359154
07 май 2013, в 16:25
Поделиться
Вот код.. Пожалуйста, попробуйте это
<?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";
?>
user3353933
27 фев. 2014, в 04:30
Поделиться
Попробуйте использовать следующий код:
<?php
$num = 525;
$sum = 0;
while ($num > 0)
{
$sum= $sum + ($num % 10);
$num= $num / 10;
}
echo "Summation=" . $sum;
?>
Mayank Dudakiya
30 май 2015, в 19:31
Поделиться
Ещё вопросы
- 1Нарезка мультииндексированного столбца данных для получения нового кадра данных
- 0Проверка нокаута при связывании hasfocus
- 1Ошибка импорта — Tornado требует обновленный модуль SSL в Ubuntu 14.04
- 1C3P0 тупик после того, как сервер простаивает в течение ночи
- 0Пакет AWS Pear не работает для Macports php56
- 0Как улучшить плагин автозаполнения jquery
- 1Как Eclipse запускает карту, сокращая работу?
- 1Преобразование даты и времени в формат отметки времени java «2019-02-21T14: 10: 18.161 + 0000»
- 1Каков подходящий метод для передачи 2 разных моделей в контроллер из представления в MVC4?
- 1включая простой файл JavaScript в конфигурации WebPack 2
- 1Asp.Net MVC отправляет JSON как строку, всегда усеченную на сервере
- 1Удалить средние элементы из массива
- 0События во время выполнения на основе манифеста
- 0prettyCheckable останавливает проверку jquery от работы в флажках
- 1Как отслеживать и увеличивать количество дубликатов, используя hashmap
- 1Firestore, как получить данные из пожарного магазина в представлении переработчика
- 1Как перенаправить поток Request.Content
- 1вставить новый экземпляр, используя API GCE
- 0JPlayer не воспроизводит видео в IE
- 1Как использовать DbNull.Value при условном присвоении значения столбца? [Дубликат]
- 0Невозможно использовать цепной локатор в транспортире
- 0Несколько форм разделяют один пост jquery
- 0C ++ NTL (by Victor Shoup): как изобразить бесконечность
- 0Изменение ориентации вызывает изменение размера шрифта
- 0Qt4.8 периодическая отправка нерегулярных данных
- 1Тестирование Junit: тестирование всех возможных границ?
- 0Значения привязки PDO не работают [дубликаты]
- 0Запустите удаленную команду Mysql с помощью сценария оболочки
- 0JQuery скользящий div исчезает
- 1Скомпилируйте javacode из запущенной java-сборки — в системе, в которой не установлен JDK
- 0Прекращение загрузки файла Symfony2 с сервера Apache
- 1Первая сборка приложения Node.JS в TFS 2015 Update2
- 0jQuery totalStorage — Получить все ключи
- 0Нажмите кнопку, чтобы установить сортируемый элемент jQuery UI на первую позицию.
- 0Как сделать косую черту URL после основного домена с помощью .htaccess
- 0Как сравнить две даты?
- 0Странные символы распечатаны для UDP
- 0Деструктор не разрушает объекты
- 0Добавление файла в crontab через скрипт php
- 0Загрузка разных объектов из файла
- 0конструктор и конструктор копирования
- 0Группа флажков
- 1Сбой смешивания с ObservableAsPropertyHelper
- 1Есть ли в Java контейнер с постоянным временем / журналом и постоянным доступом / журналом по времени индекса?
- 1Windows Phone — привязка TextBox или другого элемента управления к параметру CommandParameter кнопки
- 1AccessViolationException при добавлении элемента в список
- 0Angularjs не публиковать скрытые значения
- 1Вызовите функцию typed.js внутри компонента Vue
- 0OpenGL 3.2+ Рисование кубов вокруг существующих вершин
- 1Урожай без потерь в формате JPG без потери EXIF на Android