On 2/8/16 2:04 PM, Eugene wrote:
> On Mon, Feb 8, 2016 at 3:32 PM, Matthew Setter <matt...@maltblue.com> wrote:
> 
>> I want to propose a new PHP array method, called has_numeric_keys (or
>> something similar/better), that would have the following method signature:
>>
>> bool has_numeric_keys(array $array)
>>
>> The reason for it is to check if the array passed to it only had numeric
>> keys.
>>
>> Why this method, when you could do it in userland PHP? Answer? Convenience.
>> I found, recently, that I had to perform this kind of check, when patching
>> Zend\Db\Sql\Insert.php. The approach I took was this:
>>
>> return array_keys($arr) !== range(0, count($arr) - 1);
>>
>> Not sure of my approach, I took to Twitter and received the following
>> suggestions, amongst others:
>>
>> function isArrNum($arr) {
>>   foreach($arr as $i =>$v){
>>     if (!is_int($i)) {
>>       return false;
>>     }
>>   }
>>   return true;
>> }
>>
>> count(array_filter(array_keys($array), 'is_string')) > 0
>>
>> array_filter([...], 'is_int', ARRAY_FILTER_USE_KEY)
>>
>> This convinced me that it wasn't just me seeing a valid use case for it,
>> and that others have implemented differing solutions when presented with
>> the same situation. Given that, I believe a simple, utility, function such
>> as this would be of help.

`array_keys($array) === range(0, count($array)-1)`

This is how I check, and it seems a bit faster.

>>
>> As for who would implement it, that would be me.
>>
>> --
>> Kind regards,
>>
>>
>> *Matthew Setter*
>> *Freelance Software Developer & Technical Writer *
>> *Host of Free the Geek <http://freethegeek.fm> | Author of Zend Framework
>> 2
>> Foundations <https://leanpub.com/zendframework2-for-beginners>*
>>
>> w:  http://www.matthewsetter.com
>> t:  *@settermjd <https://www.twitter.com/settermjd>*
>> g+: *+MatthewSetterFreelanceWriterDeveloper
>> <https://plus.google.com/u/0/+MatthewSetterFreelanceWriterDeveloper/posts
>>> *
>> li: *in/matthewsetter <https://www.linkedin.com/in/matthewsetter>*
>>
> 
> 
> Usually, checking only numeric keys is not enough. You may also need to
> check if those numeric keys are a sequence starting from 0.
> At least, that was my case when I was implementing MessagePack protocol.
> And I ended up just doing this trivial check: array_values($array) ===
> $array.
> 

-- 
César D. Rodas
Open Source developer
+595-983-161124
PGP: F9ED A265 A3AB C8A1 D145 7368 158A 0336 C707 0AA6

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

Reply via email to