Req #78176 [Opn]: New function array_search_callback() accepts a callable as $needle

From: Date: Tue, 18 Jun 2019 13:09:38 +0000
Subject: Req #78176 [Opn]: New function array_search_callback() accepts a callable as $needle
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-221368@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=78176&edit=1 ID: 78176 Updated by: requinix@php.net Reported by: david at davidwbarratt dot com Summary: New function array_search_callback() accepts a callable as $needle Status: Open Type: Feature/Change Request Package: Arrays related PHP Version: Next Minor Version Block user comment: N Private report: N New Comment: I foresee a lot of "array_search or array_find, which does which?" confusion. Anyway, if you'd like to help this along, in whatever form, check out the internals mailing list. https://www.php.net/mailing-lists.php Previous Comments: ------------------------------------------------------------------------ [2019-06-18 12:56:36] david at davidwbarratt dot com Oops... and by array_search() I mean array_find() (sorry for the confusion!). array_find() would also be similar in naming to Array.find() in JavaScript. ------------------------------------------------------------------------ [2019-06-18 12:54:35] david at davidwbarratt dot com Ah! I didn't think about callable arrays. May I suggest using the name array_search() instead? None of the array functions have _callback in them, so I think it might be odd to add that. ------------------------------------------------------------------------ [2019-06-18 01:58:40] requinix@php.net It would be a breaking change: callables can be strings, arrays, __invoke-able objects, and Closures. There will be code out there that has arrays of those, and if array_search thinks its $needle may be callable then searching those arrays won't work. So this should be a new function. Probably "array_search_callback", like preg_replace_callback. ------------------------------------------------------------------------ [2019-06-17 17:12:37] david at davidwbarratt dot com Description: ------------ It would be really helpful if array_search() would accept a callable as $needle. There are many instances where it is needed to loop through an array and stop and the first instance. Currently, the only work around is to make a function with a foreach() that returns early. This would bring PHP inline with JavaScript's Array.find() method. This change would not be a breaking change because array_search() would continue to work exactly as before the change. The only difference would be that now $needle can accept a callable that returns a boolean. This change would also make array_search() more like array_filter(). Test script: --------------- // Current function search( $haystack ) { foreach ( $haystack as $index => $value ) { if ( $value->id === 3 ) { return $value; } } return null; } $found = search( $haystack ); // Future $found = array_search( function( $value, $index ) { return $value->id === 3; }, $haystack ); ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=78176&edit=1

« previous php.bugs (#221368) next »