Измените строку на int

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

<?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"

-1

Решение

И то и другое 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)

демонстрация. Этот подход устойчив к изменениям — он работает (без каких-либо изменений), если £ заменяется на $ или любой другой символ валюты, или упал вообще.

1

Другие решения

<?php
$_excl = '4.99' ;//assuming
echo $_excl;
$int_excl = floatval($_excl);
var_dump ($int_excl);
?>

Используйте приведенный выше код, так как $ _excl = 4.99, который является значением с плавающей точкой, intval () вернет 4.

0

Это должно работать для вас:

(Вы должны удалить персонажа £ из строки)

<?php

$_excl = "£4.99";
$_excl = str_replace("£", "", $_excl);
$int_excl = floatval($_excl);
var_dump ($int_excl);

?>

Выход:

float(4.99)
0

Вы анализируете значения с плавающей точкой, и, следовательно, нужно floatval() PHP Float Manual.

Если intval() возвращает 0, это означает, что преобразование не удалось. Источник: PHP Intval)

В вашем случае преобразование не выполняется, потому что строка не с цифры, а с символа валюты.

Это должно решить вашу проблему:

<?php
echo $_excl;
$int_excl = floatval(ltrim($_excl, '£'));
var_dump ($int_excl);
?>

(ltrim удаляет первый символ, если это £)

0
По вопросам рекламы [email protected]