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

From: Date: Mon, 04 Jan 2021 02:56:34 +0000
Subject: Re: Re: [RFC] Add is_list(mixed $value): bool to c heck for list-like arrays
References: 1 2  Groups: php.internals 
Request: Send a blank email to internals+get-112741@lists.php.net to get a copy of this message
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

« previous php.internals (#112741) next »