我有一个数组,我想在其中搜索uid并获得数组的键。

例子

假设我们有以下二维数组:

$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'
    )
);

函数调用search_by_uid(100)(第一个用户的uid)应该返回0。

函数调用search_by_uid(40489)应该返回2。

我试着做循环,但我想要一个更快的执行代码。


当前回答

如果你使用的是(PHP 5 >= 5.5.0),你不需要自己写函数来实现这个功能,只需要写这一行就可以了。

如果你只想要一个结果:

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

对于多个结果

$keys = array_keys(array_column($userdb, 'uid'), 40489);

如果你有一个关联数组,就像注释中指出的那样,你可以用:

$keys = array_keys(array_combine(array_keys($userdb), array_column($userdb, 'uid')),40489);

如果你使用的是PHP < 5.5.0,你可以使用这个backport,谢谢ramsey!

更新:我一直在做一些简单的基准测试,多重结果表单似乎是最快的,甚至比Jakub自定义函数还要快!

其他回答

$a = ['x' => ['eee', 'ccc'], 'b' => ['zzz']];

$found = null;
$search = 'eee';

array_walk($a, function ($k, $v) use ($search, &$found) {
    if (in_array($search, $k)) {
        $found = $v;
    }
});

var_dump($found);

这里有一句同样的句子,

$pic_square = $userdb[array_search($uid,array_column($userdb, 'uid'))]['pic_square'];

在PHP的后续版本(>= 5.5.0)中,您可以使用以下一行代码:

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

你可以结合使用两个函数,array_search和array_column。

$search_value = '5465';
$search_key   = 'uid';
$user = array_search($search_value, array_column($userdb, $search_key));

print_r($userdb[$user]);

5465是要搜索的用户ID, uid是包含用户ID的键,$userdb是问题中定义的数组。

引用:

php。net上的Array_search

net上的Array_column

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

这是可行的。你应该这样称呼它:

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

重要的是要知道,如果你使用===运算符比较类型必须完全相同,在这个例子中,你必须搜索字符串或使用==代替===。

根据安哥拉人的回答。在PHP的后续版本(>= 5.5.0)中,可以使用一行程序。

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

这里是文档:http://php.net/manual/en/function.array-column.php。