Implementing array_every() and array_any() #5280
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This has been resurrected from #1385, so some things may have changed; this is partly to see whether the code is still compatible with the engine.
Why
This change allows for a short-circuit predicate to be applied on an array or something that can be traversed, whereby either the predicate has to hold for all elements or at least one element of the array.
For instance, to test whether all elements in an array are of the same type:
Or, at least one element is out of place:
Links
Low level changes
The underlying changes revolve around unifying arrays and objects that implement the
Traversable
interface; this can be compared to similar concepts like Ruby'sEnumerable
, and allows us to build more flexible function signatures.It introduces a new zpp type specifier
t
(for traversable), with an accompanyingphp_traverse
internal function to traverse it.