В моем магазине я пытаюсь изменить строку в целое число, код, который я использую:
<?php echo $_excl; ?>
<?php $int_excl = intval($_excl);?>
<?php var_dump ($int_excl);?>
Когда я var_dump $int_excl
is говорит, что значение равно 0, когда оно должно быть 4.99.
Что я делаю неправильно?
var_dump ($_excl)
возвращается string(33) "£4.99"
И то и другое floatval
а также intval
методы начинают искать числа в начале строки (удаляя предшествующий пробел) и прекращают смотреть на первый символ, который не может быть частью числа. В вашем случае это самый первый — £
, Вот почему intval
просто возвращает 0 (как floatval
делает).
Одним из способов решения этой проблемы является удаление всех нецифровых символов в начале вашей строки с помощью preg_replace
:
$excl = '£4.99';
$value = preg_replace('/^\D+/u', '', $excl);
var_dump(intval($value)); // int(4)
var_dump(floatval($value)); // float(4.99)
демонстрация. Этот подход устойчив к изменениям — он работает (без каких-либо изменений), если £
заменяется на $
или любой другой символ валюты, или упал вообще.
<?php
$_excl = '4.99' ;//assuming
echo $_excl;
$int_excl = floatval($_excl);
var_dump ($int_excl);
?>
Используйте приведенный выше код, так как $ _excl = 4.99, который является значением с плавающей точкой, intval () вернет 4.
Это должно работать для вас:
(Вы должны удалить персонажа £
из строки)
<?php
$_excl = "£4.99";
$_excl = str_replace("£", "", $_excl);
$int_excl = floatval($_excl);
var_dump ($int_excl);
?>
Выход:
float(4.99)
Вы анализируете значения с плавающей точкой, и, следовательно, нужно floatval()
PHP Float Manual.
Если intval()
возвращает 0, это означает, что преобразование не удалось. Источник: PHP Intval)
В вашем случае преобразование не выполняется, потому что строка не с цифры, а с символа валюты.
Это должно решить вашу проблему:
<?php
echo $_excl;
$int_excl = floatval(ltrim($_excl, '£'));
var_dump ($int_excl);
?>
(ltrim
удаляет первый символ, если это £
)