Собсно простой код. Почему в итоге я получаю пустоту - не понимаю. Из текста убирается всё кроме цифр и точек. В итоге text становится 24.5.. Далее применяется функция которая проверяет последний символ и если это точка - убирает его. Далее вызывает себя. Если это не точка - возвращает данные. По факту вывод - пустота. В чём мой косяк?
$text = "24.5 кв.м.";
$text = preg_replace('~[^.0-9]+~', "", $text);
function removeDotintheend($text)
{
$last_symbol = substr($text, strlen($text)-1, 1);
if ($last_symbol == "."){
$text = substr($text, 0, strlen($text)-1);
removeDotintheend($text);
}
else
{
return $text;
}
}
$text = removeDotintheend($text);
echo $text;
$text = "24.5 кв.м.";
$text = preg_replace('~[^.0-9]+~', "", $text);
function removeDotintheend($text){
$last_symbol = substr($text, strlen($text)-1, 1);
if($last_symbol == "."){
$text = substr($text, 0, strlen($text)-1);
$text = removeDotintheend($text);
}
return $text;
}
$text = removeDotintheend($text);
echo $text;
Ошибка была в removeDotintheend($text); вы выполняли функцию, но ее результат не принимали. И нужно было убрать else{}
Проверка http://sandbox.onlinephpfunctions.com/code/2516794d5c7257c91437e3be9517a16066fbf283
Функцию removeDotintheend следует убрать, заменив библиотечной rtrim.
$text = "24.5 кв.м.";
$text = rtrim(preg_replace('~[^.0-9]+~', "", $text), '.');
echo $text;
Ценой чуть более сложной регулярки можно убрать и эту функцию.
$text = "24.5..... кв.м.";
$text = preg_replace('/(\d+)(\.?\d+)?.*/', '\1\2', $text);
var_dump($text);
Судя по входным данным и результату, который вы хотите получить, вам проще использовать функцию:
$text = "24.5 кв.м.";
$text = explode(" ", $text)[0];
и в результате получим 24.5
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости