json — INT больше 2147483647 всегда превращается в 2147483647 в переполнении стека

Мой идентификатор базы данных больше 2147483647 (целое число), поэтому, если я получу этот идентификатор, он превратится в 2147483647, когда я преобразую свои данные в Json.

Это мой результат JSON

[
{"id":2147483647, "district_id":7171051, "name":"KARAME"},
{"id":2147483647, "district_id":7171051, "name":"KETANG BARU"},
{"id":2147483647, "district_id":7171051, "name":"WAWONASA"},
{"id":2147483647, "district_id":7171051, "name":"TERNATE BARU"},
{"id":2147483647, "district_id":7171051, "name":"TERNATE TANJUNG"},
{"id":2147483647, "district_id":7171051, "name":"KOMBOS BARAT"},
{"id":2147483647, "district_id":7171051, "name":"KOMBOS TIMUR"},
{"id":2147483647, "district_id":7171051, "name":"SINGKIL SATU"},
{"id":2147483647, "district_id":7171051, "name":"SINGKIL DUA"}
]

Мои фактические данные

[
{"id":7171051001, "district_id":7171051, "name":"KARAME"},
{"id":7171051002, "district_id":7171051, "name":"KETANG BARU"},
{"id":7171051003, "district_id":7171051, "name":"WAWONASA"},
{"id":7171051004, "district_id":7171051, "name":"TERNATE BARU"},
{"id":7171051005, "district_id":7171051, "name":"TERNATE TANJUNG"},
{"id":7171051006, "district_id":7171051, "name":"KOMBOS BARAT"},
{"id":7171051007, "district_id":7171051, "name":"KOMBOS TIMUR"},
{"id":7171051008, "district_id":7171051, "name":"SINGKIL SATU"},
{"id":7171051009, "district_id":7171051, "name":"SINGKIL DUA"}
]

Я использую Laravel 5.4
Как сделать это с моим действительным идентификатором?
Благодарю.

-2

Решение

В PHP вы не можете иметь целое число больше, чем PHP_INT_MAX, который в 32-битном оборудовании (или 32-битном PHP) 2147483647 = 2^31-1это число, которое вы получаете (для справки, в 64-битном это 9223372036854775807 = 2^63-1). И ваши исходные данные, откуда бы вы их ни получали, имеют идентификатор в виде строки (обратите внимание на кавычки вокруг них).

Итак, когда вы приводите его к целому числу, оно усекается до 2147483647, Теперь у вас есть два варианта:

  • Обновите версию вашего оборудования / PHP до 64-битной. Тогда, как уже упоминалось, у вас все еще будет 9223372036854775807 предел, который, очевидно, намного выше.
  • Если вы не выполняете арифметику со своими идентификаторами, вы мог просто держите их как строку. Там нет ничего плохого с буквенно-цифровым идентификатором. В этом случае, однако, вы должны быть осторожны, рассматривая его как строку по всему вашему стеку.
3

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

Целочисленные значения более 2147483647 доступны в PHP на 64-битных платформах. Если вы используете 32-битную платформу, у вас есть ограничение на максимальное целочисленное значение.
Другая причина этой проблемы — PHP_INT_SIZE var в вашей конфигурации php (php.ini).

Джсон не имеет значения.

Вы можете прочитать больше http://php.net/manual/en/language.types.integer.php

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector