Re: [RFC] array_partition()
| From: | Ayoub EZZINI | Date: | Tue, 27 Oct 2026 16:24:02 +0000 |
| Subject: | Re: [RFC] array_partition() | ||
| References: | 1 2 3 4 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-132946@lists.php.net to get a copy of this message | ||
Hi Tim,
On 2026-10-27, Tim Düsterhus wrote:
> Please do not "top post".
Sorry about that, noted.
> One hint for the Wiki: Using
<php> around code will
> perform the proper
> escaping, and will also enable syntax highlighting.
Thanks, I've switched that bullet to <php>.
> Can you please add another "edge case"
> example that clearly shows the reference handling behavior to make sure
> every reader is aware of the full implications.
Done, in a new "By-reference elements" subsection. It shows that
writing through the result changes the input (and the other way
round), and that a reference which is no longer shared is copied as a
plain value. The outputs in the examples come from running them against
the implementation.
> I'm also not sure, I like the fact that array_partition()
> has behavior
> that cannot be replicated in userland. I can see the "follow
> array_filter()" argument for consistency, but at the same time
> array_find() is dropping references (I believe)
You're right about array_find(). I checked the other functions in
ext/standard to see where array_partition() would fit:
keep references: array_filter(), array_diff_key(), array_slice(),
array_values(), array_chunk()
drop references: array_find(), array_map()
So the functions that return part of their input as an array all keep
references. array_find() returns a single value, which can't hold a
reference anyway. I think the strongest argument for keeping them is
that replacing the current array_filter() + array_diff_key() idiom with
array_partition() then doesn't change behaviour.
That said, your point about userland replicability is fair, and
dropping references would be a one-line change. I've added it to "Open
Issues" so it gets settled before a vote, and I'm happy to go with
whatever the list prefers.
Best regards,
Ayoub