2015-08-19 29 views
3

以前我一直在Linux上開發一個使用PHP 5.6.7的應用程序,但是最近我已經使用WAMP 64位切換到Windows環境,並將PHP升級到了5.6.12,遇到幾個問題。一個問題是在後端PHP我有一個整數數組。當我打印回到打印返回數組到控制檯的前端時,我得到了不同的格式。那就是:PHP 5.6.12 - 返回整數不正確

$permission->fk_org_id = [24053826281537536,24051529749102626,111]; 
print json_encode($permission->fk_org_id); 

返回以下控制檯:

0:24053826281538000 
1:24051529749103000 
2:111 

這究竟是爲什麼?

+0

你能在這裏粘貼'echo PHP_INT_MAX'的結果嗎? – marian0

+0

看起來像它們被轉換爲浮點數,但對於64位整數它們不是太大。 – Glorfindel

+0

我做了一個打印(PHP_INT_MAX)結果是2147483647 –

回答

2

這些數字太大而不適合(32位)整數。它們將被解釋爲浮點數,請參閱documentation

如果PHP遇到超出整數類型邊界的數字,它將被解釋爲float。此外,導致超出整數類型範圍的數字的操作將返回一個float。

A float的精度約爲14位有效數字,因此這就是爲什麼您會看到零。

不幸的是,PHP在Windows不支持64點比特的整數,根據this answer

在窗口x86_64的,PHP_INT_MAX爲2147483647。這是因爲在底層的C代碼,長爲32位。

然而,在x86_64 Linux使用一個64位長,所以PHP_INT_MAX將是9223372036854775807

+1

謝謝,那麼圍繞它的工作是什麼?這些數字表示我的MySQL數據庫中的唯一ID。 –

+2

將它們作爲字符串存儲,如果不需要用它們進行計算,就像我想的那樣。 – syck

+0

謝謝你的所有意見。當我通過bootcamp運行Windows時,我最終設置了XAMPP並在osx上運行了我的開發。恥辱,但osx支持64位整數,太高興了。 –

1

你可能32位計算機上運行腳本,其中max int是2147483647,所以整數溢出occurres。根據文檔:

如果PHP遇到一個超出整數類型範圍的數字,它將被解釋爲一個float而不是。此外,如果操作超出整數類型的範圍,則返回 而不是float。

<?php 
$large_number = 2147483647; 
var_dump($large_number);      // int(2147483647) 

$large_number = 2147483648; 
var_dump($large_number);      // float(2147483648) 

$million = 1000000; 
$large_number = 50000 * $million; 
var_dump($large_number);      // float(50000000000) 
?> 

更多的整數,你可以在documentation找到。

+0

謝謝我正在運行64位Windows和64位WAMP服務器,應該發生這種情況嗎? –

+0

謝謝閱讀其他答案 –