rfc:array_key_first_last_index
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
rfc:array_key_first_last_index [2015/12/07 17:58] – jbafford | rfc:array_key_first_last_index [2016/01/01 20:43] – jbafford | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== PHP RFC: array_key_(first|last|index) ====== | ====== PHP RFC: array_key_(first|last|index) ====== | ||
* Version: 1.0 | * Version: 1.0 | ||
- | * Date: 2015-12-05 | + | * Date: 2016-01-01 |
* Author: John Bafford | * Author: John Bafford | ||
- | * Status: | + | * Status: |
* First Published at: http:// | * First Published at: http:// | ||
Line 15: | Line 15: | ||
===== Proposal ===== | ===== Proposal ===== | ||
+ | Arrays in php are ordered maps, but there is no convenient way to get the first or last key of an array (a common function in some use cases), or even an arbitrary key by index (a fairly rare need). | ||
+ | |||
array_key_first() returns the first key in an array. | array_key_first() returns the first key in an array. | ||
array_key_last() returns the last key in an array. | array_key_last() returns the last key in an array. | ||
- | array_key_index() returns the key at a specified index (using a substr-like offset; | + | array_key_index() returns the key at a specified index (using a substr-like offset; |
+ | |||
+ | <code php> | ||
+ | $arr [' | ||
+ | |||
+ | $key = array_key_first($arr); | ||
+ | |||
+ | $key = array_key_last($arr, | ||
+ | |||
+ | $key = array_key_index($arr, | ||
+ | $key = array_key_index($arr, | ||
+ | $key = array_key_index($arr, | ||
+ | |||
+ | |||
+ | // Also works for numeric arrays | ||
+ | $numeric = [1 => 1, 5 => 2, 2 => 3]; | ||
+ | $key = array_key_index($numeric, | ||
+ | $key = array_key_index($numeric, | ||
+ | $key = array_key_index($numeric, | ||
+ | </ | ||
All three functions return the requested array key, or null if the requested array key is not found (an empty array, or an out-of-bounds index in the case of array_key_index). For convenience, | All three functions return the requested array key, or null if the requested array key is not found (an empty array, or an out-of-bounds index in the case of array_key_index). For convenience, | ||
Line 42: | Line 64: | ||
- | With the reference implementation provided below, array_key_first() and array_key_last() directly retrieve the array key from the underlying hash (by setting a local hash pointer to the start/end of the array and retrieving the key for that index). By necessity, array_key_index() iterates through the keys, but does so in C code, rather than in PHP code. | + | With the reference implementation provided below, array_key_first() and array_key_last() directly retrieve the array key from the underlying hash (by setting a local hash pointer to the start/end of the array and retrieving the key for that index). By necessity, array_key_index() iterates through the keys, but does so in C code, rather than in PHP code. array_key_first() and array_key_last() are implemented in terms of array_key_index(); |
+ | |||
+ | array_key_first() and array_key_last() have O(1) time complexity. array_key_index() (when not retrieving the first or last key) has O(N) time complexity. array_key_index() is intended when only one key or value from an array is needed; if repeated calls to array_key_index() are needed for a particular array, it would likely be more performant to just use array_keys() instead. (Iterating all keys of an array using array_key_index() would be O(N^2).) As such, it's included for sake of completeness, | ||
+ | |||
+ | ===== Patches and Tests ===== | ||
+ | The GitHub Pull request for this change is here: https:// | ||
+ | |||
+ | This is a full and working implementation, | ||
===== Backward Incompatible Changes ===== | ===== Backward Incompatible Changes ===== | ||
Line 60: | Line 89: | ||
This RFC does not add new syntax, so a 50%+1 majority is required to pass. | This RFC does not add new syntax, so a 50%+1 majority is required to pass. | ||
- | |||
- | ===== Patches and Tests ===== | ||
- | The GitHub Pull request for this change is here: https:// | ||
- | |||
- | This is a full and working implementation, | ||
===== Implementation ===== | ===== Implementation ===== | ||
Line 71: | Line 95: | ||
- a link to the git commit(s) | - a link to the git commit(s) | ||
- a link to the PHP manual entry for the feature | - a link to the PHP manual entry for the feature | ||
- |
rfc/array_key_first_last_index.txt · Last modified: 2017/09/22 13:28 by 127.0.0.1