On Sun, Jan 3, 2021, at 12:17 PM, tyson andre wrote:
> 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)
> 
> Due to concerns about naming causing confusion with theoretical 
> potential future changes to the language,
> I've updated https://wiki.php.net/rfc/is_list to use the name 
> `is_array_and_list(mixed $value): bool` instead.
> (e.g. what if php used the reserved word `list` to add an actual list 
> type in the future, and is_list() returned false for that.)
> 
> I plan to start voting on the RFC in a few days.

Possible alternative that's less clumsy: is_packed_array?

--Larry Garfield

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

Reply via email to