Re: [RFC] Add is_list(mixed $value): bool to check for list-like arrays

From: Date: Sun, 20 Dec 2020 17:08:11 +0000
Subject: Re: [RFC] Add is_list(mixed $value): bool to check for list-like arrays
References: 1  Groups: php.internals 
Request: Send a blank email to internals+get-112565@lists.php.net to get a copy of this message
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

« previous php.internals (#112565) next »