Максимальный целочисленный индекс в массиве PHP

Следующий код PHP

<?php
$x[5076021987]=1234;
var_dump($x);
?>

дает следующий результат на 32bit архитектура:

array(1)
{
[781054691]=>int(1234)
}

но правильный результат на 64bit архитектура:

array(1)
{
[5076021987]=>int(1234)
}

Есть ли что-нибудь, что я мог сделать, чтобы заставить это работать должным образом даже на 32bit арка? Обратите внимание, что преобразование длинных целых в строку не является решением в моем случае. Спасибо.

2

Решение

После проверки всего, PHP документация говорит

Ключ может быть целым числом или строкой.

Проверить Syntax section,

Вот и получается, что ты должен использование String в качестве индекса. Определенно нет другого пути.

Если вы покажете, как именно вы получаете эти индексы или какую-то дополнительную информацию о том, что именно вы пытаетесь сделать, я мог бы предложить кое-что еще.

Единственное возможное решение — конвертировать индекс в float

<?php
$index = 5076021987*1.0;
$x[$index]=1234;
var_dump($x);
?>

Это, вероятно, не сработает. Так как, php собирается преобразовать его обратно в integer при использовании его в качестве индекса. У меня нет 32-битного ПК, поэтому я не могу его проверить извините.

Если это не сработает, Ты только другая надежда

<?php
$index = 5076021987+0.1; // or even 5076021987*0.1
$x[$index]=1234;
var_dump($x);
?>

А потом использовать это как-то.

Кроме этого, у вас нет другого выбора (кроме преобразования в строку, которую вы не предпочитаете).

1

Другие решения

Других решений пока нет …