2009-11-22 42 views
6

im ghi dịch vụ kết hợp twitter. Khi tôi nhận được dữ liệu json, một số id twit lớn hơn (là số nguyên tối đa cho phép trên các máy chủ 32 bit).PHP json_decode trên máy chủ 32 bit

Tôi đã đưa ra giải pháp hoạt động, chuyển đổi số nguyên thành chuỗi; theo cách đó hàm json_decode() sẽ không có bất kỳ vấn đề nào khi cố gắng tạo mảng.

Đây là những gì tôi cần phải đạt được:

Trước (dữ liệu JSON gốc)

[{"name":"john","id":5932725006},{"name":"max","id":4953467146}] 

Sau (giải pháp áp dụng)

[{"name":"john","id":"5932725006"},{"name":"max","id":"4953467146"}] 

Tôi đang nghĩ đến việc một triển khai preg_match, nhưng tôi không biết làm thế nào để làm nó chống đạn. Bất kỳ trợ giúp sẽ được nhiều đánh giá cao.

Trả lời

12

Bạn có thể sử dụng preg_replace để nắm bắt những con số và thêm dấu ngoặc kép, một cái gì đó như thế này:

$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"}] 

Hãy thử ví dụ trên here.

+2

Bạn sẽ muốn '" id ":' trong biểu thức đó, chắc chắn? Nếu không, nó sẽ khớp với bất kỳ chuỗi số nào, phá vỡ bất kỳ chuỗi nào chứa một chữ số. – bobince

+0

chính xác. nó hoạt động tốt ... nhưng nó sẽ tốt hơn nếu nó chỉ phù hợp với các chữ số gần "id": – andufo

+0

@bobnice: Đồng ý, chỉnh sửa :) – CMS

1

Nếu bạn sử dụng PHP 5.2, các id dài sẽ được phân tích thành một phao, mặc dù không lý tưởng ít nhất cung cấp cho bạn 21 bit chính xác nguyên khác, dễ dàng đủ để lưu trữ các id đó. (Một máy chủ 64 bit sẽ là lý tưởng của khóa học.)

+0

máy chủ nơi điều này đang chạy có cả môi trường php4 và php5. để kích hoạt php5 tôi phải đặt cờ này trong tệp .htaccess: Ứng dụng AddType/x-httpd-php5 .php Có thể cài đặt lạ này sẽ không cho phép tôi lấy tính năng int2float. Cảm ơn thông tin mặc dù. – andufo

+0

Điều đó sẽ hiệu quả, nhưng bạn có thể, than ôi, vẫn đang chạy phiên bản cũ hơn của PHP5. – bobince

0

Nếu nó xuống đến nó, bạn có thể cố gắng sử dụng phần mở rộng P232 của big_int. Điều này cho phép PHP sử dụng các con số cực kỳ lớn, nếu bạn cần. Đó là một bước nhảy vọt lớn, nhưng nếu bạn thường xuyên đối phó với những con số có biên giới trên các cạnh của mindnumbingness, bạn sẽ có thể tìm thấy nó hữu ích.

Các vấn đề liên quan