Req #71320 [Fbk->NoF]: 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: php-bugs@lists.php.net
Reported by: dharkness at gmail dot com
Summary: Extend array_map/filter to call method on each element
-Status: Feedback
+Status: No Feedback
Type: Feature/Change Request
Package: Arrays related
PHP Version: 5.6.17
Assigned To: cmb
Private report: N
New Comment:
No feedback was provided. The bug is being suspended because
we assume that you are no longer experiencing the problem.
If this is not the case and you are able to provide the
information that was requested earlier, please do so and
change the status of the bug back to "Re-Opened". Thank you.
Previous Comments:
------------------------------------------------------------------------
[2019-11-17 16:29:35] cmb@php.net
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.
------------------------------------------------------------------------
[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)