Количество чисел в 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
// Пример 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