Method filter()


Method filter

mixed filter(mixed arr, void|mixed fun, mixed ... extra)

Description

Filters the elements in arr through fun.

Parameter arr

arr is treated as a set of elements to be filtered, as follows:

array

Each element is filtered with fun. The return value is of the same type as arr and it contains the elements that fun accepted. fun is applied in order to each element, and that order is retained between the kept elements.

mapping

The values are filtered with fun, and the index/value pairs it accepts are kept in the returned mapping.

program

The program is treated as a mapping containing the identifiers that are indexable from it and their values.

object

If there is a lfun::cast method in the object, it's called to try to cast the object to an array, a mapping, or a multiset, in that order, which is then filtered as described above.

Parameter fun

Unless something else is mentioned above, fun is used as filter like this:

array

When both arr and fun are arrays, they should have the same lengths. In this case, the elements in arr are kept where the corresponding positions in fun are nonzero.

function(mixed ... :mixed)

fun is called for each element. It gets the current element as the first argument and extra as the rest. The element is kept if fun returns true, otherwise it's filtered out.

object

The object is used as a function like above, i.e. the lfun::`() method in it is called.

multiset

fun is indexed with each element. The element is kept if the result is nonzero, otherwise it's filtered out.

zero|void

Each element that is callable is called with extra as arguments. The element is kept if the result of the call is nonzero, otherwise it's filtered out. Elements that aren't callable are also filtered out.

string

Each element is indexed with the given string. If the result of that is zero then the element is filtered out, otherwise the result is called with extra as arguments. The element is kept if the return value is nonzero, otherwise it's filtered out.

This is typically used when arr is a collection of objects, and fun is the name of some predicate function in them.

Note

The function is never destructive on arr.

See also

map(), foreach()