@@ -5,12 +5,30 @@ function array_search (needle, haystack, argStrict) {
55 // + bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
66 // * example 1: array_search('zonneveld', {firstname: 'kevin', middle: 'van', surname: 'zonneveld'});
77 // * returns 1: 'surname'
8+ // * example 2: ini_set('phpjs.return_phpjs_arrays', 'on');
9+ // * example 2: var ordered_arr = array({3:'value'}, {2:'value'}, {'a':'value'}, {'b':'value'});
10+ // * example 2: var key = array_search(/val/g, ordered_arr); // or var key = ordered_arr.search(/val/g);
11+ // * returns 2: '3'
812
913 var strict = ! ! argStrict ,
1014 key = '' ;
1115
1216 if ( haystack && typeof haystack === 'object' && haystack . change_key_case ) { // Duck-type check for our own array()-created PHPJS_Array
13- return haystack . search ( needle , haystack , argStrict ) ;
17+ return haystack . search ( needle , argStrict ) ;
18+ }
19+ if ( typeof needle === 'object' && needle . exec ) { // Duck-type for RegExp
20+ if ( ! strict ) { // Let's consider case sensitive searches as strict
21+ var flags = 'i' + ( needle . global ? 'g' : '' ) +
22+ ( needle . multiline ? 'm' : '' ) +
23+ ( needle . sticky ? 'y' : '' ) ; // sticky is FF only
24+ needle = new RegExp ( needle . source , flags ) ;
25+ }
26+ for ( key in haystack ) {
27+ if ( needle . test ( haystack [ key ] ) ) {
28+ return key ;
29+ }
30+ }
31+ return false ;
1432 }
1533
1634 for ( key in haystack ) {
0 commit comments