I have this array converted from xml of webservice. I have 500 items in this array. I want to search any value and return all found array items with key association ( similar to database select query ). So if I search 'dummy' then it should return first item of this array.
Array
(
    [12.12.2014] => Array
        (
            [7] => Array
                (
                    [id] => 1672
                    [date] => 12.12.2014
                    [description] => rummy dummy data
                    [room] => delux
                    [Type] => garden
                    [from] => 17:00
                    [to] => 17:45
                    [assets] => Array
                        (
                [asset] => Array
                                (
                                    [0] => Array
                                        (
                                            [number] => 5275
                                            [detail] => primary one
                                        )
                    [1] => Array
                                        (
                                            [number] => 19
                                            [detail] => secondary one
                                        )
                                )
                        )
                    [references] => Array
                        (
                            [reference] => Array
                                (
                                    [personnumber] => 479470
                                    [type] => worker
                                    [name] => David
                                    [department] => Sales
                                    [cv] => Array
                                        (
                    [pdetails] => follow later  
                                        )
                                    [profile] => True
                                )
                        )
                )
        )
       [13.12.2014] => Array
        (
            [17] => Array
                (
                    [id] => 1672
                    [date] => 13.12.2014
                    [description] => brown fox jump
                    [room] => star
                    [Type] => city
                    [from] => 17:00
                    [to] => 17:45
                    [assets] => Array
                        (
                            [asset] => Array
                                (
                                   [number] => 5275
                                   [detail] => prime two
                                )
                        )
                    [references] => Array
                        (
                            [reference] => Array
                                (
                                    [personnumber] => 479470
                                    [type] => manager
                                    [name] => Albert
                                    [department] => Purchase
                                    [cv] => Array
                                        (
                    [pdetails] => follow later  
                                        )
                                    [profile] => True
                                )
                        )
                )
        )
)
I tried stripos to search string in array value and in_array based functions but either it gives incorrect result or key association is not maintained.
I am unable to find a way to maintain key->value.
function search($array, $key, $value) 
{ 
    $results = array(); 
    if (is_array($array)) 
    { 
        if (isset($array[$key]) && $array[$key] == $value) 
            $results[] = $array; 
        foreach ($array as $subarray) 
            $results = array_merge($results, search($subarray, $key, $value)); 
    } 
    return $results; 
} 
This may be worst function you have ever seen but this do the job. If some one can make it recursive ( array may be further deeper ).
function search_in_multi_array($srchvalue, $array)
    {
        $foundkey = '';
        if (is_array($array) && count($array) > 0)
            {
            foreach($array as $pkey => $pvalue)
                {
                foreach($pvalue as $ckey => $cvalue)
                    {
                    if (is_array($cvalue) && count($cvalue) > 0)
                        {
                        if(in_array($srchvalue,$cvalue))
                            {
                            $foundkey[$pkey][$ckey] = $cvalue;
                            }
                            foreach($cvalue as $dkey => $dvalue)
                                {
                                if(!is_array($dvalue))
                                    {
                                    $pos = stripos($dvalue, $srchvalue);
                                    if ($pos !== false)
                                        {
                                        $foundkey[$pkey][$ckey] = $cvalue; 
                                    }
                                }
                            }  
                        }
                    }
                }
            }
        return $foundkey;
    }
Function call - $needle = 'fox'; search_in_multi_array($needle, $my_array); This is the output
Array
(
    [13.12.2014] => Array
        (
            [17] => Array
                (
                    [id] => 1672
                    [date] => 13.12.2014
                    [description] => brown fox jump
                    [room] => star
                    [Type1] => city
                    [from] => 17:00
                    [to] => 17:45
                    [assets] => Array
                        (
                            [asset] => Array
                                (
                                    [number] => 5275
                                    [detail] => prime two
                                )
                        )
                    [references] => Array
                        (
                            [reference] => Array
                                (
                                    [personnumber] => 479470
                                    [Type1] => manager
                                    [name] => Albert
                                    [department] => Purchase
                                    [cv] => Array
                                        (
                                            [pdetails] => follow later
                                        )
                                    [profile] => 1
                                )
                        )
                )
        )
)
 
     
     
    