On Sunday, 20 October 2024 at 18:42, Gina P. Banyard <[email protected]> wrote:
> Hello internals,
>
> I would like to propose a short RFC to make the return value of the sort() and similar
> functions more useful:
> https://wiki.php.net/rfc/array-sort-return-array
I am going to respond out of threads.
This RFC does *NOT* change the by-ref parameter passing *NOR* the in-place sorting of these
functions.
I don't see why people are thinking this would be changed, as I only ever talk about the return
value.
But I added a sentence in the Unaffected PHP Functionality section.
I really struggle to see the benefit of introducing new functions that would do the exact same thing
as this RFC,
except the in-place modification, as seen by the already existing bikesheeding on function naming.
For an example, I'm going to pull out my solution to day 1 of the 2022 advents of code:
https://github.com/Girgias/advent-of-code/blob/19283e1f5ef503c8a4478e58aaa57ff2fb7164c7/2022/01/puzzle.php#L25
If we had a pipe operator, or if decided to write this less legible with nested calls, it would like
this:
$elves = array_map(
'array_sum',
array_map(
fn($v) => explode("\n", $v),
explode(
"\n\n",
$input
)
)
);
rsort($elves);
$top3 = array_slice($elves, 0, length: 3);
However, if the sort functions would return a useful value instead of true
I could
chain it together completely as follows:
$top3 = array_slice(
rsort(
array_map(
'array_sum',
array_map(
fn($v) => explode("\n", $v),
explode(
"\n\n",
$input
)
)
)
),
0,
length: 3
);
In either case, the fact the array is sorted in place is something I don't care, as it is just
a temporary step.
However, in the current state, I need to stop chaining function calls just to be able to get the
sorted array that I am going to process and discard at the next function call.
This type of data processing pattern can be generalized to any collection of data that needs to be
sorted/filtered and processed upon.
This RFC is "just" making the return value of these functions *useful*.
Would a "proper" functional variant of these functions which do not take the input
argument by reference be useful? Yes.
Is this completely orthogonal to the point of this RFC? Also yes.
Best regards,
Gina P. Banyard