phparraysmultidimensional-arrayfilter

Get the first level key of the first row containing a specified column value in a 2d array


I have an array where I want to search the uid and get the key of the array.

Examples

Assume we have the following 2-dimensional array:

$userdb = array(
    array(
        'uid' => '100',
        'name' => 'Sandra Shush',
        'pic_square' => 'urlof100'
    ),
    array(
        'uid' => '5465',
        'name' => 'Stefanie Mcmohn',
        'pic_square' => 'urlof100'
    ),
    array(
        'uid' => '40489',
        'name' => 'Michael',
        'pic_square' => 'urlof40489'
    )
);

The function call search_by_uid(100) (uid of first user) should return 0.

The function call search_by_uid(40489) should return 2.

I tried making loops, but I want a faster executing code.


Solution

  • function searchForId($id, $array) {
       foreach ($array as $key => $val) {
           if ($val['uid'] === $id) {
               return $key;
           }
       }
       return null;
    }
    

    This will work. You should call it like this:

    $id = searchForId('100', $userdb);
    

    It is important to know that if you are using === operator compared types have to be exactly same, in this example you have to search string or just use == instead ===.

    Based on angoru answer. In later versions of PHP (>= 5.5.0) you can use one-liner.

    $key = array_search('100', array_column($userdb, 'uid'));
    

    Here is documentation: http://php.net/manual/en/function.array-column.php.