> The original poster had a typo, I think, and meant array_reject not
> array_reverse. He basically implemented the solution that Larry was
> referring to, before Larry referred to it.

Yes! It means to be "array_reject()" instead of "array_reverse()". And my
syntax is wrong too, actually it should be array_reject(array, callback)
like array_filter(array, callback).

> I agree with Larry that userland implementation is trivial enough that it
> doesn't really need to be implemented in core. It's just syntactic sugar
> that's probably more trouble than it's worth.  That being said, I'm by far
> an expert when it comes to core, so I can't really say 1.) what
performance
> benefits it would provide or 2.) how hard (or easy) it would be to
> implement.

1. array_reject() should be 70% faster than array_filter(arr, fn() ...)
version;

2. basically is just replicate array_filter() code with a "not" operator at
some point.


But, analysing array_filter() now, I think that we can consider just a new
flag, instead a new function: array_filter($array, $callback,
ARRAY_FILTER_REJECT), so the implementation will be very simple and will
not need to create a new function to userland.


PS.: the array_reject() name suggestion is based on the lodash version (
https://lodash.com/docs/4.17.15#reject).



Atenciosamente,
David Rodrigues


Em seg., 31 de ago. de 2020 às 11:08, Chase Peeler <chasepee...@gmail.com>
escreveu:

> On Mon, Aug 31, 2020 at 9:52 AM Josh Bruce <j...@joshbruce.dev> wrote:
>
> > Just to confirm
> >
> > array_filter(“!is_int”, $collection)
> >
> > Would result in a collection of only non-integers??
> >
> >
> No, you'd have to put it in a closure
>
> The original poster had a typo, I think, and meant array_reject not
> array_reverse. He basically implemented the solution that Larry was
> referring to, before Larry referred to it.
>
> function array_reject(Callable $c, Array $a){
>   return array_filter(fn($item) => !$c($i), $a);
> }
>
> $non_ints = array_reject('is_int',[1,2,'a',3.5]);
>
> If you don't want to write your own array_reject method, and just handle it
> case-by-case, then it's still trivial
>
> $non_ints = array_filter(fn($i) => !is_int($i), [1,2,'a',3.5]);
>
> I do think there’s something to be said for the communication of intent
> > without syntax.
> >
> > array_without or array_reject reads easier to me than making sure to
> watch
> > for the bang.
> >
> >
> I agree with Larry that userland implementation is trivial enough that it
> doesn't really need to be implemented in core. It's just syntactic sugar
> that's probably more trouble than it's worth.  That being said, I'm by far
> an expert when it comes to core, so I can't really say 1.) what performance
> benefits it would provide or 2.) how hard (or easy) it would be to
> implement.
>
>
>
> > Cheers,
> > Josh
> >
> > >> On Aug 30, 2020, at 6:55 PM, Larry Garfield <la...@garfieldtech.com>
> > wrote:
> > >>
> > >> On Sun, Aug 30, 2020, at 9:38 AM, David Rodrigues wrote:
> > >> Currently we have array_filter(), but sometimes we need an inverse
> > function
> > >> like array_reject().
> > >> array_reject('is_null', [ 1, 2, null, 3 ]); // [ 1, 2, 3 ]
> > >> It could be easily implemented with:
> > >> function array_reverse($fn, $arr) { return array_filter(fn($item) =>
> > >> !$fn($item), $arr); }
> > >> Anyway, I think that It should be implemented by core, once that we
> have
> > >> array_filter().
> > >
> > > Any boolean function can be inverted with a simple ! in a short
> > closure.  I don't really see a need to do that in C.
> > >
> > > --Larry Garfield
> > >
> > > --
> > > PHP Internals - PHP Runtime Development Mailing List
> > > To unsubscribe, visit: https://www.php.net/unsub.php
> >
> > --
> > PHP Internals - PHP Runtime Development Mailing List
> > To unsubscribe, visit: https://www.php.net/unsub.php
> >
> >
>
> --
> Chase Peeler
> chasepee...@gmail.com
>

Reply via email to