phparraysmultidimensional-arrayfilter

Get all first level keys from a 2d array where a specified value is found anywhere in the row


I have this multidimensional array:

$numbers = array (
    "one_digit" => array (1,2,3,4,5),
    "two_digits" => array (20,21,22,23,24,25),
    "three_digits" => array (301,302,303,304,304),
    "mixed_digits" => array (9,29,309,1)
);

I need a way to search in the $numbers array for the following:

Thus function must be able to spot the presence in one or many subarrays.


Solution

  • You can try this with array_search() in a loop -

    $numbers = array (
        "one_digit" => array (1,2,3,4,5),
        "two_digits" => array (20,21,22,23,24,25),
        "three_digits" => array (301,302,303,304,304),
        "mixed_digits" => array (9,29,309,1)
    );
    
    function search_value($array, $value)
    {
      $result = array();
      foreach($array as $key => $sub) {
        // check if element present in sub array
        if(array_search($value, $sub) !== false) {
          // store the key
          $result[] = $key;
        }
      }
      return $result;
    }
    
    var_dump(search_value($numbers, 1));
    var_dump(search_value($numbers, 5));
    

    Output

    array(2) {
      [0]=>
      string(9) "one_digit"
      [1]=>
      string(12) "mixed_digits"
    }
    array(1) {
      [0]=>
      string(9) "one_digit"
    }