You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过搜索列值获取二维数组行值?PHP代码返回空值求解

解决二维数组按列搜索获取对应行值的问题

先说说你的代码哪里出问题了,再给你几个靠谱的解决方案~

原代码错误原因

你用array_column($arr, 'name', 'id')生成的是一个以id为键、name为值的关联数组,结构如下:

[
    1 => 'emp1',
    2 => 'emp2',
    3 => 'emp3'
]

而array_search(2, $这个数组)是在数组的值里查找2,但数组里的值都是员工名字,自然找不到匹配项,所以返回空值。

针对性解决方案

根据你的实际需求,分场景给出不同的实现方式:

场景1:已知id,获取对应的name

不需要用array_search,直接利用array_column生成的键值映射数组取值即可,效率最高:

$arr = array(
    0 => array('id' =>1, 'name' =>'emp1'),
    1 => array('id' => 2, 'name' => 'emp2'),
    2 => array('id' => 3, 'name' => 'emp3')
);

// 生成id => name的映射数组
$idToNameMap = array_column($arr, 'name', 'id');
// 直接通过id获取对应name
echo $idToNameMap[2]; // 输出:emp2

场景2:已知name,获取对应的id

有两种简洁的实现方式:

方式1:用array_column+array_search

// 先提取所有name列,找到目标name的索引
$targetIndex = array_search('emp2', array_column($arr, 'name'));
// 通过索引获取对应id
echo $arr[$targetIndex]['id']; // 输出:2

方式2:生成name => id的映射数组直接取值

$nameToIdMap = array_column($arr, 'id', 'name');
echo $nameToIdMap['emp2']; // 输出:2

场景3:通用场景——根据某列值获取整行数据或其他任意列

如果需要获取匹配行的完整数据(不止某一列),可以用array_filter实现:

// 筛选出id=2的行
$matchedRows = array_filter($arr, function($item) {
    return $item['id'] === 2;
});
// 重置数组键,取第一个匹配行
$targetRow = reset($matchedRows);

// 可以获取该行任意字段
echo $targetRow['name']; // 输出:emp2
echo $targetRow['id'];   // 输出:2

如果你的PHP版本是7.4及以上,用箭头函数会更简洁:

$targetRow = reset(array_filter($arr, fn($item) => $item['id'] === 2));
echo $targetRow['name'];

内容的提问来源于stack exchange,提问作者Steffi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:33:46