crazy_str
@crazy_str
web-программист

Как подсчитать кол-во одинаковых цифр и суммировать их?

Всем привет, не могу сообразить как суммировать кол-во одинаковых цифр в строке к примеру имеется строка
7774455566
Делаю вот так.
$split = str_split(7774455566);
echo json_encode(array_icount_values($split));
function array_icount_values($array) {
			$ret_array = array();
			foreach($array as $value) {
				foreach($ret_array as $key2 => $value2) {
					if(strtolower($key2) == strtolower($value)) {
						$ret_array[$key2]++;
						continue 2;
					}
				}
				$ret_array[$value] = 1;
			}
			return $ret_array;
		}

он мне возвращает
{"7":3,"4":2,"5":3,"6":2}
Как мне суммировать только те цифры где имеются значения совпадений > 1 то есть 3+2+3+2?
  • Вопрос задан
  • 234 просмотра
Пригласить эксперта
Ответы на вопрос 3
index0h
@index0h
PHP, Golang. https://github.com/index0h
1. Не обманывайте людей)) 7774455566 у вас это совсем не строка)
2. Вам тут json ну вот вообще нафиг не нужен.
3. Создаете ассоциативный массив где ключами выступают цифры, а значениями - их количество. Дальше суммируете в другом цикле те значения, что больше 1.
4. Если в строке могут быть посторонние символы - удалите их регуляркой
preg_replace('/[^\d]/', '', $inputString);
Ответ написан
@SharuPoNemnogu
не язык плохой, программисты такие...
echo array_sum(array_filter(array_count_values(str_split('7774455566')), function($v) {return $v > 1;}));
Ответ написан
Комментировать
Примерно так:
$result = [];
$number = 7774455566;
while ($number) {
    $digit = $number % 10;
    if (!isset($result[$digit]) {
        $result[$digit] = 0;
    }
    $result[$digit]++;
    $number = (int) ($number / 10);
}
$sum = 0;
foreach ($result as $digit => $occurencesCount) {
    if ($occurencesCount > 1) {
        $sum += $digit;
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы