Php возврат данных рекурсивной функции

209
02 декабря 2017, 10:20

Собсно простой код. Почему в итоге я получаю пустоту - не понимаю. Из текста убирается всё кроме цифр и точек. В итоге 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;
Answer 1
$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

Answer 2

Функцию 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);
Answer 3

Судя по входным данным и результату, который вы хотите получить, вам проще использовать функцию:

$text = "24.5 кв.м.";
$text = explode(" ", $text)[0];

и в результате получим 24.5

READ ALSO
подсветка в php-файлах в pycharm community edition

подсветка в php-файлах в pycharm community edition

Подскажите, пожалуйста, как настроить раскраску php-файлов в pycharm CE? Сейчас они выводятся как plain text

214
Настройка ЧПУ в .htaccess

Настройка ЧПУ в .htaccess

Не получается правильно настроить ЧПУНа сайте есть ссылки вида:

186
Проблема с запросами SQL

Проблема с запросами SQL

Имею такой php код, его главная цель - создать таблицу при её отсутствии, при наличии - вывести сообщение "таблица найдена"

293