Req #71320 [Opn->Fbk]: Extend array_map/filter to call method on each element
Edit report at https://bugs.php.net/bug.php?id=71320&edit=1
ID: 71320
Updated by: cmb@php.net
Reported by: dharkness at gmail dot com
Summary: Extend array_map/filter to call method on each
element
-Status: Open
+Status: Feedback
Type: Feature/Change Request
Package: Arrays related
PHP Version: 5.6.17
-Assigned To:
+Assigned To: cmb
Block user comment: N
Private report: N
New Comment:
Hmm, wouldn't the newly introduced arrow functions offer a
sensible alternative to your suggestion? For instance,
$titles = array_map(fn($book) => $book->getTitle(), $books);
Of course, still some boilerplate code, but a lot more flexible
since properties can be read as well, for instance.
Previous Comments:
------------------------------------------------------------------------
[2016-01-09 15:39:48] dharkness at gmail dot com
After further consideration, perhaps this deserves new functions to avoid confusing the definition
of a callable. They would behave just like these:
function array_map_method(array $arr, $name) {
return $arr
? array_map(function ($object) use ($name) {
return $object->$name();
}, $arr)
: array();
}
and
function array_filter_method(array $arr, $name) {
return $arr
? array_filter($arr, function ($object) use ($name) {
return $object->$name();
})
: array();
}
May as well add array_map_property() and array_filter_property() for completeness. :)
------------------------------------------------------------------------
[2016-01-09 15:16:27] dharkness at gmail dot com
Description:
------------
I'm finding myself writing code like the following lately:
$titles = array_map(
function ($book) { return $book->getTitle(); },
$books
);
and
$anonymous = array_filter(
$books,
function ($book) { return $book->isAnonymous(); }
);
I was initially thinking a new callable form word work, e.g. [null, 'methodName'], but
that by itself isn't callable and would not make sense when passed to other methods that accept
callable such as call_user_func. The functions would either build a real callable using each array
element or simply call the method directly on it.
$titles = array_map([null, 'getTitle'], $books);
and
$anonymous = array_filter($books, [null, 'isAnonymous']);
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=71320&edit=1
Thread (4 messages)