PHP多维数组通过值搜索
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日
如果您正在使用 (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的自定义函数还要快!
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'));