Size when a large subscript is specified for an array and a value is assigned
Sep 6, 2020
PHP
JavaScript
Motivation
When developing a web application, when creating an array with the user ID (integer) as an index, isn’t it uselessly large? ??
Conclusion
If you use an array in PHP and Map
in JavaScript, the size will not be unnecessarily large.
For PHP
There seems to be no problem even if you specify a large subscript.
$ array = [];
$ array [100] ='hoge';
echo count ($ array); // 1
For JavaScript
When a large subscript was specified, it became an array with empty
inserted in the open space.
let array = [];
array [100] ='hoge';
console.log (array); // [empty x 100, "hoge"]
console.log (array.length); // 101
When I used Map
, it behaved like an array in PHP.
let map = new Map ([[100,'hoge']]);
console.log (map); // Map (1) {100 => "hoge"}
console.log (map.size); // 1
What is the upper limit?
For PHP
The upper limit of the integer depends on the platform, and is about 2 billion or about 900 K. (Reference) In my environment, I was able to use up to 900 kyo (9 * 10 ^ 18).
$ array = [];
$ n = 9 * 10 ** 18;
$ array [$ n] ='hoge';
echo count ($ array); // 1
Even if there is a 900K user, it seems that it can be identified as a different user.
$ n = 9 * 10 ** 18;
$ m = $ n --1;
var_dump ($ n == $ m); // false
For JavaScript
There is a safe integer upper limit (2 ^ 53-1) and it is available in Number.MAX_SAFE_INTEGER
(Reference/Number/MAX_SAFE_INTEGER))
The upper limit is smaller than PHP (~ 9.0 * 10 ^ 15)
When using Map
, there seems to be no problem if it is within this upper limit.
let n = Number.MAX_SAFE_INTEGER;
let map = new Map ([[n,'hoge']]);
console.log (map); // Map (1) {9007199254740991 => "hoge"}
console.log (map.size); // 1
let m = n --1;
console.log (n === m); // false