Intereting Posts
Обычный jQuery для отключения кнопок отправки во всех формах после проверки HTML5 Соединение с WebSocket с «ws: //mydomain.com: 8084 /? Peer_id = 123» не выполнено: ошибка при установлении соединения: net :: ERR_CONNECTION_TIMED_OUT mysql_real_escape_string работает в localhost, но не на веб-сервере сортировка полей таблицы с использованием простых XML и xpath Что вызывает отказ в разрешении при удалении файлов? PHPUnit Текущий список узлов пуст Внедрение входа Oauth2, Неустранимая ошибка: Class 'Google_Service' не найден получить элемент HTML по значению атрибута в php Что такое недокументированный SessionIdInterface в PHP 5.5? PHP: Предотвращение захвата сеанса с помощью токена, хранящегося в файле cookie? В чем разница между crc32 и crc32b? Объединение двух массивов по индексу Получение идентификатора пользователя от входа в систему пользователя в FOSUserBundle move_uploaded_file (…): не удалось открыть поток: разрешение отклонено в … Использование Mac OS X Mountain Lion Laravel 5 получает InvalidStateException в AbstractProvider.php

PHP json_decode на 32-битном сервере

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 использовать числа, которые необычайно большие, если вам нужно. Это большой скачок, но если вы регулярно занимаетесь цифрами, граничащими с краем ума, вам, скорее всего, будет полезно.