rfc:array_change_keys
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_change_keys [2016/05/29 17:53] – Clarify the two exceptions to all values being present in the output colinodell | rfc:array_change_keys [2016/05/31 02:20] – Revise "Future Scope", mentioning Traversable objects colinodell | ||
---|---|---|---|
Line 24: | Line 24: | ||
</ | </ | ||
- | This approach requires | + | This approach requires 4 lines of code. Furthermore, |
That latter issue can solved by composing several existing functions like so: | That latter issue can solved by composing several existing functions like so: | ||
Line 31: | Line 31: | ||
<?php | <?php | ||
$newArray = array_combine( | $newArray = array_combine( | ||
- | array_map(function ($value) { | + | array_map( |
- | return ' | + | |
- | }, array_values($oldArray)), | + | return ' |
- | | + | }, |
+ | array_keys($oldArray), | ||
+ | $oldArray | ||
+ | | ||
+ | $oldArray | ||
); | ); | ||
</ | </ | ||
Line 40: | Line 44: | ||
While this does work, it has some major drawbacks: | While this does work, it has some major drawbacks: | ||
- | * Requires | + | |
- | * The anonymous function only has access to the original key **or** the original value - **not both**. | + | |
- | * The purpose of the code is not immediately obvious. | + | * The input array is referenced 3 times. |
+ | * If you want to re-key an iterator' | ||
===== Proposal ===== | ===== Proposal ===== | ||
This RFC proposes the creation of a new core function '' | This RFC proposes the creation of a new core function '' | ||
+ | |||
+ | <code php> | ||
+ | $newArray = array_change_keys($originalArray, | ||
+ | return ' | ||
+ | }); | ||
+ | </ | ||
+ | |||
+ | Function definition: | ||
<code php> | <code php> | ||
Line 109: | Line 123: | ||
==== Pros ==== | ==== Pros ==== | ||
- | === Faster Execution | + | === Provides Common General-Purpose Functionality |
- | Re-keying | + | PHP already has an '' |
- | {{: | + | === Usefulness === |
+ | |||
+ | Needing to re-key array is a common task for some PHP developers, especially those needing their array to work like a dictionary. | ||
=== Cleaner Code === | === Cleaner Code === | ||
Using this function makes it immediately obvious to other developers that an array is being re-keyed. | Using this function makes it immediately obvious to other developers that an array is being re-keyed. | ||
+ | |||
+ | === Matches Existing Behavior === | ||
+ | |||
+ | The "edge cases" mentioned above (returning invalid types or duplicate keys) matches existing behavior in PHP that developers already understand and expect. | ||
+ | |||
+ | === Faster Execution Than array_combine() === | ||
+ | |||
+ | Re-keying an array with '' | ||
+ | |||
+ | {{: | ||
+ | |||
+ | {{: | ||
+ | |||
+ | (Benchmarks generated with https:// | ||
+ | |||
+ | === Works With Functional Code === | ||
+ | |||
+ | This function can be nested inside of other method calls for function composition. | ||
==== Cons ==== | ==== Cons ==== | ||
+ | |||
+ | === Slower Than foreach === | ||
+ | |||
+ | As noted in the benchmarks above, the '' | ||
+ | |||
+ | === Does Not Support Traversable === | ||
+ | |||
+ | Like the other '' | ||
+ | |||
+ | === Easily Implemented In User Land === | ||
+ | |||
+ | This function can be implemented in user land using one of the alternative approaches shown above. | ||
===== Backward Incompatible Changes ===== | ===== Backward Incompatible Changes ===== | ||
Line 142: | Line 188: | ||
===== Future Scope ===== | ===== Future Scope ===== | ||
- | Returning | + | Other '' |
===== Proposed Voting Choices ===== | ===== Proposed Voting Choices ===== |
rfc/array_change_keys.txt · Last modified: 2018/11/27 23:34 by colinodell