Я пытаюсь получить строковое число в целое число, но это не работает, как ожидалось, вот код с проблемой:
$usage['msisdn'] = "46720000000";
$usage['msisdn'] = (int)$usage['msisdn'];
echo $usage['msisdn'];
Он отображает 2147483647 как целое число, но я хочу получить 46720000000 как целое число.
В чем дело?
Кстати, я анализирую данные с помощью json_encode ();
ОБНОВИТЬ: Неважно, я получил его для работы с intval ()
Это потому, что максимальное значение int32
является 2147483647. Ваш номер телефона превышает это значение.
Вы можете найти максимальное значение int на вашем сервере, используя:
echo PHP_INT_MAX;
Я думаю, что хранить номер телефона как целое число — плохая практика, и это может повлиять на вас позже. Зачем? Потому что номер телефона может начинаться с:
00
или же +
0
Кроме того, вы можете отформатировать номер телефона в какой-то момент, сохраняя его в виде строки, что значительно облегчает эту часть.
Рождественский бонус 🙂 libphonenumber-для-PHP
Ваш код не работает, потому что строка преобразования в int является максимальным значением, основанным на вашей системе, как указано в документации:
Максимальное значение зависит от системы. 32-битные системы имеют максимальный диапазон целых чисел со знаком от -2147483648 до 2147483647. Так, например, в такой системе intval (‘1000000000000’) вернет 2147483647. Максимальное значение целого числа со знаком для 64-битных систем составляет 9223372036854775807.
Источник : http://php.net/manual/en/function.intval.php
Поскольку вы не можете легко изменить значение max_int, вы можете вместо этого попытаться использовать преобразование для плавания.
$usage['msisdn'] = floatval($usage['msisdn']);