Andrew, On Mon, Jul 23, 2012 at 9:26 AM, Andrew Faulds <a...@ajf.me> wrote:
> > (resending because of broken formatting) > > Hi there, > > I apologise for my previous email. It was a disorganised mess that didn't > really > make the case for that function very well. So here's a proper proposal > (perhaps > too proper?). > > Introduction ------------ > > I am proposing a function, named array_pick(), which takes a single (array) > argument, and returns a random value from it. > > Implementation -------------- > > https://github.com/php/php-src/pull/142 > > Specification ------------- > > mixed array_pick(array $array); > The function returns the value of one random array element from $array. > Should > said array be empty, then it should return NULL. > > Rationale --------- > > - array_rand exists, however it only gets a random key, not a random > value. This > is the logical counterpart for API completeness > - array_pick is more convenient than $a[array_rand($a)], especially for > these > cases: > - short array syntax + array_pick, e.g. some_func(array_pick(['foo.png', > 'bar.jpg', 'foobar.gif'])) vs $a = ['foo.png, 'bar.jpg', 'foobar.gif']; > some_func($a[array_rand($a)]); > - where using long names or nested arrays, e.g. > some_func(array_pick($foo['bar']['foobar'])); > - array_pick is less wasteful than shuffling an array and taking the first > element > - $a[array_rand($a)] issuse a NOTICE from an undefined index if the array > is > empty, but array_pick() just returns null, which is more convenient > - I need this function myself quite often. It exists in two other > languages I > use that I can think of off the top of my head (Python, Game Maker > Language) > > Objections ---------- > - PHP has too many functions > - Yes, but that doesn't mean we can't add more. Otherwise we can't > improve > things and move forward. > Broken Window Theory. http://en.wikipedia.org/wiki/Broken_windows_theory Saying things are already broken is never a valid justification for breaking things further. > - This can be easily implemented in userland code/this is too frivolous to > warrant addition > - This is true, however similarly to a lot of standard library > functionality, > it is used frequently enough that it is silly to have to rewrite it every > time > it is needed > It's a one-liner. It's not like it's non-trivial, or there are weird edge-cases, or security implications. It's a one line implementation: function array_pick(array $array) { return empty($array) ? null : $array[array_rand($array)]; } > - It is also the logical counterpart to array_rand(). One for a key, one > for a > value. > Again, since it's so trivial to implement, why is it needed? Symmetry is a decent goal, but justified symmetry. Not just symmetry for the sake of it... > - The name isn't logical > - Whilst you could argue that array_rand_key is a better name, I have > chosen > array_pick because it is shorter, and has a similar name to similar > functions in > Python (random.choice) and GML (choose) > Actually, I think that array_pick() is a poor name. Python's name makes sense, because it's bound to the random namespace. But being bound to the array namespace indicates a different thing. I would argue that array_random_value() would be a better choice (or any one of a number of names)... > --- > Thoughts? > Shared. Thanks, Anthony