Skip to Content


Recursive search for traversing multidimensional arrays.

PHP June 22, 2017


nebula()->in_array_r($needle, $haystack, $strict)


(Required) (String) The string to look for
Default: None

(Required) (Array) The array to look in
Default: None

(Optional) (Boolean/String) The type and value must both match, or "contains" for partial string checking
Default: true

Parameter Notes

Pass 'contains' for $strict to for a partial string check (using stripos).

Request or provide clarification »

Source File

Located in /libs/Utilities/Utilities.php on line 755.

1 Hook

Find these filters and actions in the source code below to hook into them. Use do_action() and add_filter() in your functions file or plugin.

Need a new filter hook? Request one here.

This function has no action hooks available. Request one?

        public function in_array_r($haystack, $needles, $strict=true){
            $override = apply_filters('pre_in_array_r', null, $haystack, $needles, $strict);
            if ( isset($override) ){return $override;}

            foreach ( $needles as $needle ){
                if ( $strict === true ){ //If strict, match the type and the value
                    if ( $needle === $haystack ){
                        return true;
                } else {
                    if ( $strict === 'contains' ){ //If strict is 'contains', check if the item contains the needle
                        if ( stripos($haystack, $needle) !== false ){
                            return true;
                    } elseif ( $$needle === $haystack ){ //Otherwise check if the item matches the needle (regardless of type)
                        return true;

                if ( is_array($needle) && in_array_r($haystack, $needle, $strict) ){ //If the item is an array, recursively check that array
                    return true;

            return false;


To override this PHP function, use this hook in your child theme or plugin ("my_custom" can be changed):

add_filter('pre_in_array_r', 'my_custom_in_array_r', 10, 4); //The last integer must be 1 more than the actual parameters
function my_custom_in_array_r($null, $needle, $haystack, $strict){ //$null is required, but can be ignored
    //Write your own code here

    return true; //Return true to prevent the original function from running afterwords

You can completely disable this PHP function with a single line actions:

 add_filter('pre_in_array_r', '__return_false');