В PHP часто встречаются ситуации, когда вам необходимо извлечь числа из строки и выполнить с ними математические операции. Независимо от того, работаете ли вы с пользовательским вводом, анализируете данные из файла или манипулируете строками, извлечение и суммирование чисел может оказаться полезным навыком. В этой статье мы рассмотрим несколько методов выполнения этой задачи, дополненные разговорными объяснениями и примерами кода.
Метод 1: регулярные выражения
Регулярные выражения — это мощный инструмент для сопоставления с образцом и извлечения определенных данных из строк. В PHP вы можете использовать функцию preg_match_all вместе с шаблоном регулярного выражения для извлечения всех чисел из заданной строки. Вот пример:
$string = "I have 10 apples, 5 bananas, and 3 oranges.";
preg_match_all('/\d+/', $string, $matches);
$numbers = $matches[0];
$sum = array_sum($numbers);
echo "The sum is: " . $sum;
Объяснение: Мы определяем шаблон регулярного выражения \d+
, который соответствует одной или нескольким цифрам. Функция preg_match_all
ищет все вхождения этого шаблона в строке и сохраняет их в массиве $matches
. Затем мы вычисляем сумму извлеченных чисел, используя array_sum
, и отображаем результат.
Метод 2: разнесение и цикл
Другой подход — разделить строку на массив слов с помощью функции explode
, а затем перебрать каждое слово, чтобы проверить, является ли оно числом. Если да, то прибавляем его к текущей сумме. Вот пример:
$string = "This is a string with 42 and 99 in it.";
$words = explode(" ", $string);
$sum = 0;
foreach ($words as $word) {
if (is_numeric($word)) {
$sum += (int)$word;
}
}
echo "The sum is: " . $sum;
Объяснение: мы используем explode
, чтобы разделить строку на массив слов. Затем в цикле мы проверяем, является ли каждое слово числовым, используя is_numeric
. Если это так, мы приводим его к целому числу и добавляем его к сумме. Наконец, мы отображаем общую сумму.
Метод 3: использование sscanf
Функция sscanf
в PHP позволяет нам анализировать входные данные в соответствии с указанным форматом. Мы можем использовать эту функцию для извлечения чисел из строки. Рассмотрим следующий пример:
$string = "The total is 123.45, and the discount is 10%.";
$number = sscanf($string, "%f");
$sum = array_sum($number);
echo "The sum is: " . $sum;
Объяснение: мы используем %f
в качестве спецификатора формата в sscanf
, который соответствует числу с плавающей запятой. Функция возвращает массив с извлеченными числами, и мы вычисляем сумму, используя array_sum
. Наконец, мы отображаем сумму.