PHP多维数组通过值搜索

15 浏览
0 Comments

PHP多维数组通过值搜索

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

举例

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

$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

我尝试使用循环,但我想要一个执行更快的代码。

admin 更改状态以发布 2023年5月22日
0
0 Comments

如果您正在使用 (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的自定义函数还要快!

0
0 Comments

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

这个将可以工作。你应该这样调用它:

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

重要的是要知道,如果你使用 === 运算符比较类型,它们必须完全相同,在这个例子中你必须搜索 string 或者只使用 == 而不是 ===

基于 angoru 的答案。 在 PHP 的后续版本(>= 5.5.0)中,你可以使用一句代码。

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

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

0