rfc:array_change_keys

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Next revisionBoth sides next revision
rfc:array_change_keys [2016/05/30 03:33] – Fix error in previous change; show example usage under Proposal colinodellrfc:array_change_keys [2016/05/31 02:16] – Emphasize that no new quirks are being added colinodell
Line 57: Line 57:
     return 'someValue'; // Whatever custom logic is needed     return 'someValue'; // Whatever custom logic is needed
 }); });
 +</code>
 +
 +Function definition:
 +
 +<code php>
 +array array_change_keys(array $originalArray, callable $callback)
 </code> </code>
  
Line 117: Line 123:
 ==== Pros ==== ==== Pros ====
  
-=== Faster Execution ===+=== Provides Common General-Purpose Functionality ===
  
-Re-keying an array with ''array_change_keys()'' is faster than the two alternate approaches shown earlier:+PHP already has an ''array_change_key_case'' function, which is an incredibly specific implementation that isn't useful in the majority of cases where an array needs to be re-keyed.  By providing a general-purpose function for a common problem we prevent the need for other ''array_change_key_*'' variants in the future.
  
-{{:rfc:array_change_keys_benchmark.png?800|}}+=== 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.  No new edge cases or quirks are being introduced with this RFC.
 +
 +=== Faster Execution Than array_combine() ===
 +
 +Re-keying an array with ''array_change_keys()'' is faster than the ''array_combine'' approach:
 +
 +{{:rfc:array_change_keys_bench1.png?600|}}
 +
 +{{:rfc:array_change_keys_bench2.png?600|}}
 +
 +(Benchmarks generated with https://github.com/Ocramius/array_change_keys-benchmark)
 +
 +=== Works With Functional Code ===
 +
 +This function can be nested inside of other method calls for function composition.  The same is not possible for the ''foreach'' approach (without requiring the creation of a separate method to encapsulate that functionality).
  
 ==== Cons ==== ==== Cons ====
 +
 +=== Slower Than foreach ===
 +
 +As noted in the benchmarks above, the ''foreach'' loop approach is faster than ''array_change_keys'' in most (but not all) cases.
 +
 +=== Does Not Support Traversable ===
 +
 +Like the other ''array_'' functions, this one also doesn't support iterators, which may be seen as a step backwards.
 +
 +=== Easily Implemented In User Land ===
 +
 +This function can be implemented in user land using one of the alternative approaches shown above.  There's a general feeling among some developers that "what can be implemented in userland shouldn't be in core".
  
 ===== Backward Incompatible Changes ===== ===== Backward Incompatible Changes =====
rfc/array_change_keys.txt · Last modified: 2018/11/27 23:34 by colinodell