| @@ 478-487 (lines=10) @@ | ||
| 475 | * @param array $list |
|
| 476 | * @return array |
|
| 477 | */ |
|
| 478 | function takeWhile() { |
|
| 479 | $takeWhile = function($predicate, $list) { |
|
| 480 | $first = head($list); |
|
| 481 | return (null == $first || !$predicate($first)) |
|
| 482 | ? [] |
|
| 483 | : prepend($first, takeWhile($predicate, tail($list))); |
|
| 484 | ||
| 485 | }; |
|
| 486 | return apply(curry($takeWhile), func_get_args()); |
|
| 487 | } |
|
| 488 | ||
| 489 | /** |
|
| 490 | * Same as `takeWhile` but taking elements from the end of the array. |
|
| @@ 502-511 (lines=10) @@ | ||
| 499 | * @param array $list |
|
| 500 | * @return array |
|
| 501 | */ |
|
| 502 | function takeLastWhile() { |
|
| 503 | $takeLastWhile = function($predicate, $list) { |
|
| 504 | $last = last($list); |
|
| 505 | return (null == $last || !$predicate($last)) |
|
| 506 | ? [] |
|
| 507 | : append($last, takeLastWhile($predicate, init($list))); |
|
| 508 | ||
| 509 | }; |
|
| 510 | return apply(curry($takeLastWhile), func_get_args()); |
|
| 511 | } |
|
| 512 | ||
| 513 | /** |
|
| 514 | * Takes elements from an array **until** the predicate |
|