Hi internals,

I've created the RFC https://wiki.php.net/rfc/is_list

This adds a new function `is_list(mixed $value): bool` that will return true
if the type of $value is array and the array keys are `0 .. count($value)-1` in 
that order.

It's well-known that PHP's `array` data type is rare among programming languages
in that it supports both integer and string keys
and that iteration order is important and guaranteed.
(it is used for overlapping use cases - in many other languages, both 
vectors/lists/arrays and hash maps are available)

While it is possible to efficiently check that something is an array,
that array may still have string keys, not start from 0, have missing array 
offsets,
or contain out of order keys.

It can be useful to verify that the assumption that array keys are consecutive 
integers is correct,
both for data that is being passed into a module or for validating data before 
returning it from a module.
However, because it's currently inconvenient to do that, this has rarely been 
done in my experience.

In performance-sensitive serializers or data encoders, it may also be useful to 
have an efficient check to distinguish lists from associative arrays.
For example, json_encode does this when deciding to serialize a value as [0, 1, 
2] instead of {“0”:0,“2”:1,“1”:1}
for arrays depending on the key orders.

Prior email threads/PRs have had others indicate interest in the ability to 
efficiently check
if a PHP `array` has sequential ordered keys starting from 0

https://externals.io/message/109760 “Any interest in a list type?”
https://externals.io/message/111744 “Request for couple memory optimized array 
improvements”
Implementation: https://github.com/php/php-src/pull/6070 (some discussion is in 
the linked PR it was based on)

Thanks,
- Tyson
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php

Reply via email to