PHPRO.ORG

Here is a function that which functions in the same manner as the PHP in_array() function, except this will search recursively through a multidimensional array. The recursive in_array function takes two parameters and an optional third.

Just like in_array() the function searches $array for any occurrence of $string. If the optional third parameter is set to true, the function will check for type also. Recursively search a multi-dimensional array easily with this.


<?php

    
/**
    *
    * @recursively check if a value is in array
    *
    * @param string $string (needle)
    *
    * @param array $array (haystack)
    *
    * @param bool $type (optional)
    *
    * @return bool
    *
    */
    
function in_array_recursive($string$array$type=false)
    {
        
/*** an recursive iterator object ***/
        
$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($array));

        
/*** traverse the $iterator object ***/
        
while($it->valid())
        {
            
/*** check for a match ***/
            
if( $type === false )
            {
                if( 
$it->current() == $string )
                {
                    return 
true;
                }
            }
            else
            {
                if( 
$it->current() === $string )
                {
                    return 
true;
                }
            }
            
$it->next();
        }
        
/*** if no match is found ***/
        
return false;
    }


    
/*** example usage ***/

    /*** the array to search ***/
    
$array = array(
            array(
'cat''dog''mouse'),
            array(
'dingo''wombat''emu'),
            array(
'fish', array('whale''shark'), 'stingray'),
            
'steve irwin'
            
);
            

    
/*** the string to search for ***/
    
$string 'whale';

    
/*** check if the string is in the array ***/
    
if( in_array_recursive$string$array ) )
    {
        echo 
'found ' $string;
    }
    else
    {
        echo 
$string ' not found.';
    }
?>