im написание твиттера mashup службы. Когда я получаю json-данные, некоторые из идентификаторов twit больше, чем 2147483647 (что является максимальным допустимым целым числом на 32-битных серверах).
Я придумал решение, которое работает, которое преобразует целые числа в строки; таким образом, функция json_decode () не будет иметь проблем при попытке создания массива.
Это то, что мне нужно достичь:
До (исходные данные JSON)
[{"name":"john","id":5932725006},{"name":"max","id":4953467146}]
После (решение применяется)
[{"name":"john","id":"5932725006"},{"name":"max","id":"4953467146"}]
Я думаю о реализации preg_match, но я понятия не имею, как это сделать пуленепробиваемым. Любая помощь будет высоко ценится.
Вы можете использовать preg_replace
для захвата чисел и добавления кавычек, например:
$jsonString = '[{"name":"john","id":5932725006},{"name":"max","id":4953467146}]'; echo preg_replace('/("\w+"):(\d+)/', '\\1:"\\2"', $jsonString); //prints [{"name":"john","id":"5932725006"},{"name":"max","id":"4953467146"}]
Попробуйте приведенный выше пример.
Если вы используете PHP 5.2, то длинные идентификаторы будут анализироваться в float, что, хотя и не идеально, по крайней мере дает вам еще 21 бит целочисленной точности, чего должно быть достаточно для хранения этих идентификаторов. (Конечно, 64-битный сервер был бы идеальным.)
Если это произойдет, вы можете попытаться использовать расширение big_int
PECL. Это позволяет PHP использовать числа, которые необычайно большие, если вам нужно. Это большой скачок, но если вы регулярно занимаетесь цифрами, граничащими с краем ума, вам, скорее всего, будет полезно.