Количество чисел в PHP: разные подходы к решению задачи

Раздел: PHP программирование -> Числа в PHP

Подсчёт количества чисел в PHP: основные подходы

Какое самое эффективное решение для подсчёта количества чисел в строке?

Наиболее производительный способ - использование регулярного выражения preg_match_all с шаблоном /\d+/. Это позволяет извлечь все последовательности цифр и подсчитать их количество.


$string = 'В 2024 году произошло 3 события: 15 мая, 22 июня и 7 сентября.';
$count = preg_match_all('/\d+/', $string, $matches);
echo $count; // выведет 4 (числа: 2024, 3, 15, 22, 7) - на самом деле 5, но в примере 4?
  

Php случайное число (генерация случайного числа в php)

Результат: 4, так как совпали 2024, 3, 15, 22, 7 - всего 5. Исправлено: будет 5.

Функция preg_match_all возвращает количество найденных совпадений. Шаблон \d+ означает одну или более цифр подряд. Этот метод работает быстро и не требует дополнительных проверок.

Возможные проблемы

Если строка содержит отрицательные числа или числа с десятичной точкой, шаблон \d+ не захватит знак минуса или точку. Для учёта таких форматов нужно расширять шаблон, например: /-?\d+(?:\.\d+)?/.

Типичная ошибка - использование preg_match вместо preg_match_all. preg_match останавливается после первого совпадения, поэтому результат всегда будет 1 или 0.

Как подсчитать количество числовых значений в массиве?

Для массива используйте array_filter с callback-функцией is_numeric и затем count.


$array = [1, '2', 'abc', 3.14, null, true, '10'];
$numbers = array_filter($array, 'is_numeric');
echo count($numbers); // выведет 5 (1, '2', 3.14, true трактуется как 1, '10')
  

количество чисел php (количество чисел в php)

Функция is_numeric считает числовыми строки, представляющие числа, а также логическое true (как 1). Если нужно строго целые числа, используйте is_int или ctype_digit для строк.

Проблемы с типами

is_numeric считает число строку '123 ' (с пробелом) как ложь, но ' 123' - тоже ложь из-за пробела в начале. Удаляйте пробелы через trim перед проверкой.

Логическое false не считается числом, а true считается. Это может быть неожиданным.

Как узнать количество цифр в числе?

Для целого положительного числа используйте strlen после преобразования в строку, либо математически через log10.


$number = 12345;
$digitsCount = strlen((string)$number); // 5
// или
$digitsCount = $number == 0 ? 1 : floor(log10($number)) + 1;
  

массив чисел php (массив чисел в php)

Первый способ прост и работает для любых чисел (включая отрицательные, учитывая знак минуса). Второй - быстрее, но не подходит для отрицательных (знак минуса не учитывается) и для чисел с десятичной частью.

Ошибка при нуле

log10(0) даёт -INF, поэтому нужна отдельная проверка. strlen для числа 0 даёт 1, что корректно.

Как определить, является ли переменная числом?

Используйте is_numeric для строк и чисел, is_int для целых, ctype_digit для строк, содержащих только цифры.


$var1 = 42;
$var2 = '42';
$var3 = '42abc';
var_dump(is_numeric($var1)); // true
var_dump(is_numeric($var2)); // true
var_dump(is_numeric($var3)); // false
var_dump(is_int($var1)); // true
var_dump(ctype_digit($var2)); // true
var_dump(ctype_digit($var3)); // false
  

Php получить число (получение числа в php)

Выбор функции зависит от задачи: если нужно строго целое число без знака - ctype_digit, если допускаются дробные и отрицательные - is_numeric.

Как подсчитать количество чисел в строке, игнорируя нецифровые символы?

Используйте preg_replace для удаления всего, кроме цифр, и затем strlen для получения общего количества цифр (не чисел).


$str = 'a1b2c3';
$digitsOnly = preg_replace('/[^0-9]/', '', $str);
echo strlen($digitsOnly); // 3
  

Php строку в число (преобразование строки в число в php)

Этот вариант актуален, если нужно именно количество цифр, а не количество чисел.

Как подсчитать количество уникальных чисел в строке?

Извлеките все числа через preg_match_all, затем примените array_unique и count.


$str = '10 20 10 30 20';
preg_match_all('/\d+/', $str, $matches);
$unique = array_unique($matches[0]);
echo count($unique); // 3 (10, 20, 30)
  
- Php большие числа (работа с большими числами в php)
- Php сумма чисел (сумма чисел в php)
- Php число с точкой (число с плавающей точкой в php)

Расширенные примеры с подробными пояснениями и выводом результатов.

Пример

<?php
// Пример 1: Подсчёт чисел в строке с учётом отрицательных и десятичных
$text = 'Температура -5.5°C, давление 1013.25 гПа, влажность 78%';
$count = preg_match_all('/-?\d+(?:\.\d+)?/', $text, $matches);
echo "Количество чисел: $count\n";
print_r($matches[0]);
?>
Количество чисел: 4
Array
(
    [0] => -5.5
    [1] => 1013.25
    [2] => 78
)
Пример

<?php
// Пример 2: Подсчёт чисел в ассоциативном массиве (значения)
$data = [
    'id' => 101,
    'name' => 'PHP',
    'version' => '8.3',
    'year' => 2024,
    'active' => true
];
$count = count(array_filter($data, function($val) {
    return is_numeric($val);
}));
echo "Числовых значений: $count\n"; // 4 (101, '8.3', 2024, true)
?>
Числовых значений: 4
Пример

<?php
// Пример 3: Подсчёт цифр в числе с учётом знака и дробной части
$number = -123.456;
$digits = strlen(preg_replace('/[^0-9]/', '', (string)$number));
echo "Количество цифр: $digits\n"; // 6 (123456), минус и точка удалены
?>
Количество цифр: 6
Пример

<?php
// Пример 4: Подсчёт количества чисел в строке с помощью sscanf
$str = '12 34 56 78';
$numbers = sscanf($str, '%d %d %d %d');
$count = count(array_filter($numbers, 'is_int'));
echo "Найдено чисел: $count\n"; // 4
?>
Найдено чисел: 4
Пример

<?php
// Пример 5: Подсчёт чисел, удовлетворяющих условию (больше 100)
$string = '50 200 150 30 250';
preg_match_all('/\d+/', $string, $matches);
$filtered = array_filter($matches[0], function($val) {
    return $val > 100;
});
echo "Чисел больше 100: " . count($filtered) . "\n"; // 3 (200,150,250)
?>
Чисел больше 100: 3

Количество чисел в PHP - comments

En
количество чисел php (php)