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

PHP中如何根据另一数组的ID值筛选关联数组?

实现PHP数组按指定ID筛选的几种方法

这需求在日常PHP开发里太常见啦,给你分享几种实用的实现方式,你可以根据自己的代码场景和PHP版本来选:

方法一:用array_filter()+索引优化(推荐,效率高)

array_filter()是PHP原生的数组过滤函数,配合array_flip()把目标ID数组转成索引数组后,查找效率会大幅提升(尤其是当$b里的元素很多时):

$a = array(
    array('id' => 1, 'name' => "Facebook"),
    array('id' => 2, 'name' => "Twitter"),
    array('id' => 3, 'name' => "Google"),
    array('id' => 4, 'name' => "Linkdin"),
    array('id' => 5, 'name' => "Github"),
);
$b = array(1, 3, 5);

// 把$b转成以ID为键的关联数组,将O(n)的in_array查找变成O(1)的isset判断
$allowedIds = array_flip($b);

// 过滤出id在允许列表里的元素
$result = array_filter($a, function($item) use ($allowedIds) {
    return isset($allowedIds[$item['id']]);
});

// 可选:如果需要重置数组的索引(array_filter会保留原数组的索引)
$result = array_values($result);

方法二:foreach循环遍历(最直观,适合新手理解)

如果觉得闭包有点抽象,用foreach循环逐个判断也很清晰,逻辑一目了然:

$a = array(
    array('id' => 1, 'name' => "Facebook"),
    array('id' => 2, 'name' => "Twitter"),
    array('id' => 3, 'name' => "Google"),
    array('id' => 4, 'name' => "Linkdin"),
    array('id' => 5, 'name' => "Github"),
);
$b = array(1, 3, 5);

$result = array();
foreach ($a as $item) {
    // 检查当前元素的id是否在$b的列表中
    if (in_array($item['id'], $b)) {
        $result[] = $item;
    }
}

小贴士:如果$b的元素数量较多,同样建议先把$b转成array_flip()后的索引数组,把in_array()换成isset(),能显著提升运行速度。

方法三:PHP 7.4+ 短闭包写法(极简风格)

如果你的项目已经升级到PHP 7.4及以上,用短闭包(Arrow Functions)可以把代码压缩得非常紧凑,可读性也不错:

$a = array(
    array('id' => 1, 'name' => "Facebook"),
    array('id' => 2, 'name' => "Twitter"),
    array('id' => 3, 'name' => "Google"),
    array('id' => 4, 'name' => "Linkdin"),
    array('id' => 5, 'name' => "Github"),
);
$b = array(1, 3, 5);

$allowedIds = array_flip($b);
$result = array_values(array_filter($a, fn($item) => isset($allowedIds[$item['id']])));

补充说明

  • 如果不需要重置结果数组的索引,可以去掉array_values(),保留原数组的索引值;
  • 如果$b里存在重复的ID,array_flip()会自动去重(因为关联数组的键是唯一的),但这不影响最终筛选结果,我们只关心ID是否存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:52:34