1

PHP substr関数は、整数から変換された文字列を受け入れません... :P

状況

このようにコードを残すと、動作します:

<?php

$key = '35110100840754000150550010000014301000000809';
echo substr($key, 35, -1);

?>

そして結果は正しいです:

00000080

問題

しかし、このキーは整数変数から (データベースから) 取得します。したがって、結果は null であり、次のコードから得られるものと同様です。

<?php

$key = 35110100840754000150550010000014301000000809;
echo substr($key, 35, -1);

?>

結果は空白の文字列です。

(string)キャスト、substr($key."", 35, -1)など、すべてを試しましたが、機能しません。

誰か提案はありますか?

4

5 に答える 5

3

データベースが整数値を返す場合、32 ビット (64 ビット サーバーの場合は 64 ビット) の制限が適用されます。35110100840754000150550010000014301000000809 は、64 ビット サーバーの最大整数値をはるかに超えています。float に変換される可能性があり、その場合は精度が低下します。

データベースクエリを取得して文字列としてキャストすると、問題が解決するはずです

于 2011-02-04T14:51:05.700 に答える
1

数値が大きすぎて PHP の整数にはなりません。マニュアルを参照してください。

あなたの場合、35110100840754000150550010000014301000000809、のようなものになります3.5110100840754E43(数桁を与えるか取る)。位置35(文字列の末尾の後...) から開始すると、結果は になりますNULL

于 2011-02-04T14:51:54.093 に答える
1

substr の後に $key を出力してみてください。関数の後で数値がすでに null になっていることがわかります。整数の範囲は -2147483648 ~ 2147483647 です。

値に型キャストを適用し、文字列、strval() または (string)$key に変換します

于 2011-02-04T14:52:39.803 に答える
0

strval() が機能する可能性があります。PHP で文字列と mysql を扱う、この関連する SO 投稿を確認してください: PHP で整数を文字列に変換する

于 2011-02-04T14:50:49.320 に答える
0

根本的な問題は、整数値をオーバーフローしているため、割り当て時に数値が浮動小数点数に変換されることです。

于 2011-02-04T14:57:39.453 に答える