On Sat, Dec 19, 2020, at 7:43 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)
> 
> Thanks,
> - Tyson

Well, since I'm quoted... :-)

I'm fine with this, but have one question and one correction:

* If we do eventually end up with list/vec types, would the naming here 
conflict at all?  Or would it cause confusion and name collision?  (Insert name 
bikeshedding here.)

* The last quote, from me, has a small error.  The last sentence shouldn't be a 
bullet point but its own paragraph, after the list is complete.

--Larry Garfield

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

Reply via email to