2009-11-22 18 views
6

bir twitter mashup hizmeti im im. Json verilerini aldığımda, bazı twit ids, 'dan daha büyüktür (32bit sunucularda izin verilen maksimum sayıdır).Bir jitter_decode bir 32bit sunucuda

Tamsayıları dizelere dönüştüren bir çözüm buldum; Bu şekilde json_decode() işlevi diziyi oluşturmaya çalışırken herhangi bir sorun yaşamayacak.

Bu

i elde etmek gerekenler:

önce (çözüm uygulamalı)

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

sonra (orijinal JSON verileri) Ben düşünüyorum

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

Bir preg_match uygulaması, ama nasıl kurşun geçirmez yapmak için hiçbir fikrim yok. Herhangi bir yardım çok takdir edilecektir.

cevap

12

Rakamları yakalamak için preg_replace kullanmak ve böyle bir şey tırnak ekleyebilirsiniz:

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

yukarıdaki örneği here deneyin.

+2

Bu ifadede "id": 'ifadesini kullanmak ister misiniz? Aksi takdirde, herhangi bir sayı dizisiyle eşleşir ve bir rakam içeren herhangi bir dizeyi kötü bir şekilde kırır. – bobince

+0

tam olarak. o iyi çalışıyor ... ama sadece "id": – andufo

+0

@bobnice: Katılıyorum, düzenlenmiş :) – CMS

1

PHP 5.2 kullanırsanız, bu uzun kimlikler bir floatta ayrıştırılır; bu, ideal olmayan en az 21 bitlik bir tamsayı kesinliği verir, bu da bu kimlikleri depolamak için kolayca yeterli olmalıdır. (Bir 64-bit sunucu elbette idealdir.)

+0

, bunun çalıştığı sunucunun hem php4 hem de php5 ortamları vardır. php5'i etkinleştirmek için bu bayrağı .htaccess dosyasında ayarlamanız gerekir: AddType application/x-httpd-php5 .php Belki bu garip ayar int2float özelliğini kullanmama izin vermez. Yine de bilgi için teşekkürler. – andufo

+0

Bu işe yaramalı, ancak siz de, PHP'nin eski bir sürümünü hala çalıştırabilirsiniz. – bobince

0

Aşağıya doğru geliyorsa, big_int PECL uzantısını kullanmayı deneyebilirsiniz. Bu, PHP'nin ihtiyacınız olan durumlarda, olağanüstü derecede büyük sayıları kullanmasına izin verir. Bu büyük bir adımdır, ancak rutin olarak zihin tutkunluğunun sınırını aşan sayılarla uğraşıyorsanız, muhtemelen yardımcı olabilirsiniz.

İlgili konular