PHP substr - первый параметр не принимает целые числа - PullRequest
1 голос
/ 04 февраля 2011

Функция PHP substr не принимает строки, преобразованные из целых чисел ...: P

Ситуация

Если я оставлю код, как это, он работает:

<?php

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

?>

И результат правильный:

00000080

Проблема

Но я получаю этот ключ из целочисленной переменной (из базы данных).Таким образом, результат равен нулю и похож на то, что я получаю из этого кода:

<?php

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

?>

И результат - пустая строка.

Я попробовал все, как (строка) casting, substr ($ key. "", 35, -1) , и это не работает.

У кого-нибудь есть предложения?

Ответы [ 5 ]

3 голосов
/ 04 февраля 2011

Если база данных возвращает целочисленное значение, то на нее распространяются 32-разрядные (или 64-разрядные, если вы работаете на 64-разрядном сервере) ограничения. 35110100840754000150550010000014301000000809 превышает максимальное целочисленное значение даже для 64-разрядного сервера. Он может быть преобразован в число с плавающей точкой, в этом случае вы потеряете точность.

Получите запрос к базе данных, чтобы преобразовать его в строку, и это должно решить вашу проблему

1 голос
/ 04 февраля 2011

попробуйте напечатать $ key после substr. Вы увидите, что число уже нулевое после функции. Диапазон целых чисел составляет от -2147483648 до 2147483647.

Применить приведение типа к вашему значению, преобразовав его в строку, strval () или (строку) $ key

1 голос
/ 04 февраля 2011

Число слишком большое, чтобы быть целым числом в php, см. Руководство .

В вашем случае 35110100840754000150550010000014301000000809 будет примерно таким же, как 3.5110100840754E43 (дать или взятьнесколько цифр).Когда вы начнете с позиции 35 (после конца строки ...), результат будет NULL.

0 голосов
/ 04 февраля 2011

Основная проблема заключается в том, что число преобразуется в число с плавающей точкой при его назначении, поскольку оно переполняет целочисленное значение.

0 голосов
/ 04 февраля 2011

strval () может работать.Посмотрите этот связанный пост SO, посвященный строкам и MySQL в PHP: Преобразование целого числа в строку в PHP

...