rfc:any_all_on_iterable
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
rfc:any_all_on_iterable [2021/02/08 15:33] – tandre | rfc:any_all_on_iterable [2021/06/13 14:36] (current) – tandre | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== PHP RFC: PHP\iterable\any() and all() on iterables ====== | ====== PHP RFC: PHP\iterable\any() and all() on iterables ====== | ||
- | * Version: 0.5 | + | * Version: 0.6 |
* Date: 2020-08-30 | * Date: 2020-08-30 | ||
* Author: Tyson Andre, tandre@php.net | * Author: Tyson Andre, tandre@php.net | ||
- | * Status: | + | * Status: |
* First Published at: https:// | * First Published at: https:// | ||
* Implementation: | * Implementation: | ||
Line 57: | Line 57: | ||
namespace PHP\iterable; | namespace PHP\iterable; | ||
- | /** Determines whether any element of the iterable satisfies the predicate. */ | + | /** |
- | function any(iterable $input, ?callable $callback = null) { | + | * Determines whether any element of the iterable satisfies the predicate. |
+ | * | ||
+ | * | ||
+ | * If the value returned by the callback is truthy | ||
+ | * (e.g. true, non-zero number, non-empty array, truthy object, etc.), | ||
+ | * this is treated as satisfying the predicate. | ||
+ | * | ||
+ | * @param iterable $input | ||
+ | * @param null|callable(mixed): | ||
+ | */ | ||
+ | function any(iterable $input, ?callable $callback = null): bool { | ||
foreach ($input as $v) { | foreach ($input as $v) { | ||
if ($callback !== null ? $callback($v) : $v) { | if ($callback !== null ? $callback($v) : $v) { | ||
Line 66: | Line 76: | ||
return false; | return false; | ||
} | } | ||
- | /** Determines whether all elements of the iterable satisfy the predicate */ | + | </ |
- | function all(iterable $input, ?callable $callback = null) { | + | <code php> |
+ | /** | ||
+ | * Determines whether all elements of the iterable satisfy the predicate. | ||
+ | * | ||
+ | * If the value returned by the callback is truthy | ||
+ | * (e.g. true, non-zero number, non-empty array, truthy object, etc.), | ||
+ | * this is treated as satisfying the predicate. | ||
+ | * | ||
+ | * @param iterable $input | ||
+ | * @param null|callable(mixed): | ||
+ | */ | ||
+ | function all(iterable $input, ?callable $callback = null): bool { | ||
foreach ($input as $v) { | foreach ($input as $v) { | ||
if (!($callback !== null ? $callback($v) : $v)) { | if (!($callback !== null ? $callback($v) : $v)) { | ||
Line 82: | Line 103: | ||
- If this was provided only in userland, there' | - If this was provided only in userland, there' | ||
- If the standard library provided it, then polyfills for newer php functionality could adopt this as well, making cleaner code easier to write. | - If the standard library provided it, then polyfills for newer php functionality could adopt this as well, making cleaner code easier to write. | ||
+ | |||
+ | ==== Implementation Details ==== | ||
+ | |||
+ | When '' | ||
+ | |||
+ | When '' | ||
+ | |||
+ | |||
+ | <code php> | ||
+ | php > var_export(PHP\iterable\any([false])); | ||
+ | false | ||
+ | php > var_export(PHP\iterable\any([true])); | ||
+ | true | ||
+ | php > var_export(PHP\iterable\any([0])); | ||
+ | false | ||
+ | php > var_export(PHP\iterable\any([1])); | ||
+ | true | ||
+ | php > var_export(PHP\iterable\any([0], | ||
+ | false | ||
+ | php > var_export(PHP\iterable\any([1], | ||
+ | true | ||
+ | |||
+ | php > var_export(PHP\iterable\all([true, | ||
+ | true | ||
+ | php > var_export(PHP\iterable\all([1, | ||
+ | true | ||
+ | php > var_export(PHP\iterable\all([true, | ||
+ | false | ||
+ | php > var_export(PHP\iterable\all([1, | ||
+ | false | ||
+ | php > var_export(PHP\iterable\all([1, | ||
+ | false | ||
+ | </ | ||
==== Secondary Vote: any()/all() or any_value()/ | ==== Secondary Vote: any()/all() or any_value()/ | ||
Line 239: | Line 293: | ||
Add '' | Add '' | ||
- | Voting started on 2021-02-08 and ends on 2021-02-22. | + | Voting started on 2021-02-08 and ended on 2021-02-22. |
- | <doodle title=" | + | <doodle title=" |
* Yes | * Yes | ||
* No | * No | ||
Line 260: | Line 314: | ||
* Prefer the global namespace | * Prefer the global namespace | ||
* Confused about the implementation | * Confused about the implementation | ||
+ | * Prefer userland solutions | ||
* Other | * Other | ||
* Voted for this RFC | * Voted for this RFC | ||
Line 270: | Line 325: | ||
- https:// | - https:// | ||
- [[rfc: | - [[rfc: | ||
- | - [[rfc: | + | - [[rfc: |
+ | - [[rfc: | ||
+ | - [[rfc: | ||
===== Rejected Features ===== | ===== Rejected Features ===== | ||
Line 281: | Line 337: | ||
* 0.4: Change name to '' | * 0.4: Change name to '' | ||
* 0.5: Add straw poll | * 0.5: Add straw poll | ||
+ | * 0.6: Add examples of how this works, add in missing return type, clarify treatment of predicate $callback return type |
rfc/any_all_on_iterable.1612798411.txt.gz · Last modified: 2021/02/08 15:33 by tandre