PHP multidimensional array search by value

In PHP, multidimensional array search refers to searching a value in a multilevel nested array. There are various techniques to carry out this type of search, such as iterating over nested arrays, recursive approaches and inbuilt array search functions.

Iterative Approach:
Iterating over the array and searching for significant match is the simplest approach one can follow. Check if an element of the given array is itself an array or not and add the element to the search path, else run array search on the nested array.

Example:

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to carry out multidimensional array search
  
  
// Function to iteratively search for a given value
function searchForId($search_value, $array, $id_path) {
  
    // Iterating over main array
    foreach ($array as $key1 => $val1) {
  
        $temp_path = $id_path;
          
        // Adding current key to search path
        array_push($temp_path, $key1);
  
        // Check if this value is an array
        // with atleast one element
        if(is_array($val1) and count($val1)) {
  
            // Iterating over the nested array
            foreach ($val1 as $key2 => $val2) {
  
                if($val2 == $search_value) {
                          
                    // Adding current key to search path
                    array_push($temp_path, $key2);
                          
                    return join(" --> ", $temp_path);
                }
            }
        }
          
        elseif($val1 == $search_value) {
            return join(" --> ", $temp_path);
        }
    }
      
    return null;
}
  
// Multidimensional array 
$gfg_array = array(
    array(
        'score' => '100',
        'name' => 'Sam',
        'subject' => 'Data Structures'
    ),
    array(
        'score' => '50',
        'name' => 'Tanya',
        'subject' => 'Advanced Algorithms'
    ),
    array(
        'score' => '75',
        'name' => 'Jack',
        'subject' => 'Distributed Computing'
    )
);
  
$search_path = searchForId('Advanced Algorithms',
                    $gfg_array, array('$'));
  
print($search_path);
  
?>

chevron_right


Output:

$ --> 1 --> subject

Recursive Approach:
In case, when levels of nested arrays increase, it becomes hard to write such programs and debug them. In such cases its better to write a recursive program which can cleanly be written without adding any nested for loops.



Example:

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to carry out multidimensional array search
  
  
// Function to recursively search for a given value
function array_search_id($search_value, $array, $id_path) {
      
    if(is_array($array) && count($array) > 0) {
          
        foreach($array as $key => $value) {
  
            $temp_path = $id_path;
              
            // Adding current key to search path
            array_push($temp_path, $key);
  
            // Check if this value is an array
            // with atleast one element
            if(is_array($value) && count($value) > 0) {
                $res_path = array_search_id(
                        $search_value, $value, $temp_path);
  
                if ($res_path != null) {
                    return $res_path;
                }
            }
            else if($value == $search_value) {
                return join(" --> ", $temp_path);
            }
        }
    }
      
    return null;
}
  
// Multidimensional (Three dimensional) array
$gfg_array = array(
    "school1" => array(
        "year" => "2017",
        "data" => array(
            'score' => '100',
            'name' => 'Sam',
            'subject' => 'Data Structures'
        )
    ),
      
    "school2" => array(
        "year" => "2018",
        "data" => array(
            'score' => '50',
            'name' => 'Tanya',
            'subject' => 'Advanced Algorithms'
        )
    ),
      
    "school3" => array(
        "year" => "2018",
        "data" => array(
            'score' => '75',
            'name' => 'Jack',
            'subject' => 'Distributed Computing'
        )
    )
);
  
$search_path = array_search_id('Jack', $gfg_array, array('$'));
print($search_path);
  
?>

chevron_right


Output:

$ --> school3 --> data --> name

Multidimensional array search using array_search() method:
The array_search() is an inbuilt function which searches for a given value related to the given array column/key. This function only returns the key index instead of a search path.

Example:

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP program to carry out multidimensional array search
  
  
// Multidimensional array
$gfg_array = array(
    array(
        'score'   => '100',
        'name'    => 'Sam',
        'subject' => 'Data Structures'
    ),
    array(
        'score'   => '50',
        'name'    => 'Tanya',
        'subject' => 'Advanced Algorithms'
    ),
    array(
        'score'   => '75',
        'name'    => 'Jack',
        'subject' => 'Distributed Computing'
    )
);
  
$id = array_search('50', array_column($gfg_array, 'score'));
echo $id;
  
?>

chevron_right


Output:

1


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.




Article Tags :
Practice Tags :


Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.