PHP 多维数组按值搜索

2022-08-30 05:52:55

我有一个数组,我想在其中搜索并获取数组的键。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'
    )
);

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

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

我尝试制作循环,但我想要更快的执行代码。


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

这将起作用。你应该这样称呼它:

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

重要的是要知道,如果您使用运算符比较的类型必须完全相同,在此示例中,您必须搜索或仅使用 .===string=====

基于安戈鲁的答案。在更高版本的 PHP () 中,您可以使用单行。>= 5.5.0

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

以下是文档:http://php.net/manual/en/function.array-column.php


答案 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,则可以使用此向后移植,谢谢ramsey!

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