Michael Brittlebank
Michael Brittlebank

Reputation: 330

PHP Search Multidimensional Array - Not Associative

I am trying to write a piece of code that searches one column of 2-D array values and returns the key when it finds it. Right now I have two functions, one to find a value and return a boolean true or false and another (not working) to return the key. I would like to merge the two in the sense of preserving the recursive nature of the finding function but returning a key. I cannot think how to do both in one function, but working key finder would be much appreciated.

Thanks

function in_array_r($needle, $haystack, $strict = true) {
foreach ($haystack as $item) {
    if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict))) {
        return true;
    }
}

return false;

}

function loopAndFind($array, $index, $search){
     $returnArray = array();
     foreach($array as $k=>$v){
           if($v[$index] == $search){   
                $returnArray[] = $k;
           }
     }
     return $returnArray;

}`

Sorry, I meant to add an example. For instance:

Array [0]{
[0]=hello
[1]=6
}
[1]
{
[0]=world
[1]=4
}

and I want to search the array by the [x][0] index to check each string of words for the search term. If found, it should give back the index/key in the main array like "world" returns 1

Upvotes: 0

Views: 789

Answers (2)

Ingmar Boddington
Ingmar Boddington

Reputation: 3500

This works:

$array = array(array('hello', 6), array('world', 4));
$searchTerm = 'world';

foreach ($array as $childKey => $childArray) {
    if ($childArray['0'] == $searchTerm) {
        echo $childKey; //Your Result
    }
}

Upvotes: 2

hakre
hakre

Reputation: 197795

You already have all you need in your first function. PHP does the rest:

$findings = array_map('in_array_r', $haystack);
$findings = array_filter($findings); # remove all not found
var_dump(array_keys($findings)); # the keys you look for

Upvotes: 1

Related Questions