Число строк в целое число не работает Переполнение стека

Я пытаюсь получить строковое число в целое число, но это не работает, как ожидалось, вот код с проблемой:

$usage['msisdn'] = "46720000000";
$usage['msisdn'] = (int)$usage['msisdn'];

echo $usage['msisdn'];

Он отображает 2147483647 как целое число, но я хочу получить 46720000000 как целое число.
В чем дело?

Кстати, я анализирую данные с помощью json_encode ();


ОБНОВИТЬ: Неважно, я получил его для работы с intval ()

3

Решение

Это потому, что максимальное значение int32 является 2147483647. Ваш номер телефона превышает это значение.

Вы можете найти максимальное значение int на вашем сервере, используя:

echo PHP_INT_MAX;

Я думаю, что хранить номер телефона как целое число — плохая практика, и это может повлиять на вас позже. Зачем? Потому что номер телефона может начинаться с:

  • IDD: 00 или же +
  • NDD: 0

Кроме того, вы можете отформатировать номер телефона в какой-то момент, сохраняя его в виде строки, что значительно облегчает эту часть.

Рождественский бонус 🙂 libphonenumber-для-PHP

7

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

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

Максимальное значение зависит от системы. 32-битные системы имеют максимальный диапазон целых чисел со знаком от -2147483648 до 2147483647. Так, например, в такой системе intval (‘1000000000000’) вернет 2147483647. Максимальное значение целого числа со знаком для 64-битных систем составляет 9223372036854775807.

Источник : http://php.net/manual/en/function.intval.php

Поскольку вы не можете легко изменить значение max_int, вы можете вместо этого попытаться использовать преобразование для плавания.

$usage['msisdn']  = floatval($usage['msisdn']);
4

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