php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Request #71320 Extend array_map/filter to call method on each element
Submitted: 2016-01-09 15:16 UTC Modified: -
Votes:1
Avg. Score:2.0 ± 0.0
Reproduced:1 of 1 (100.0%)
Same Version:1 (100.0%)
Same OS:1 (100.0%)
From: dharkness at gmail dot com Assigned:
Status: Open Package: Arrays related
PHP Version: 5.6.17 OS:
Private report: No CVE-ID: None
Have you experienced this issue?
Rate the importance of this bug to you:

 [2016-01-09 15:16 UTC] 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']);


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2016-01-09 15:39 UTC] 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. :)
 
PHP Copyright © 2001-2019 The PHP Group
All rights reserved.
Last updated: Fri Aug 23 18:01:26 2019 UTC