PHP中如何高效降维mysqli_fetch_all返回的二维数组?
针对你需要把mysqli_fetch_all()返回的二维ID数组转成一维数组的需求,我给你推荐几个最高效且完全不需要手动写循环的方案,其中最优的甚至能从查询源头就搞定:
1. 最优方案:直接从数据库查询获取一维数组
其实你完全不需要先用mysqli_fetch_all()拿到二维数组再处理,直接用mysqli_fetch_column()就能一步到位得到一维ID数组,这是性能最高的方式,因为省去了中间生成二维数组的步骤。
代码示例:
// 假设$conn是你的数据库连接 $query = "SELECT mytable.ID FROM mytable WHERE status = 1"; $result = mysqli_query($conn, $query); $ids = mysqli_fetch_column($result);
mysqli_fetch_column()会自动把查询结果集中的第一列(这里就是ID)提取成一个一维数组,完全符合你想要的array(648546,648552,...)格式。
2. 已有二维数组时的高效降维:array_column()
如果你已经通过mysqli_fetch_all()得到了二维数组(比如你提供的那个示例数组),那么PHP内置的array_column()函数就是你的最佳选择。它是底层用C实现的,比任何手动循环都高效,而且代码极其简洁:
代码示例:
// 假设$resultArray是mysqli_fetch_all()返回的二维数组 $ids = array_column($resultArray, 'ID');
这个函数专门用来从二维数组中提取指定键名的列,直接返回一维数组,完全不需要写循环,PHP 5.5及以上版本都支持。
3. 兼容老版本PHP的备选方案:array_map()
如果你的项目还在使用PHP 5.5以下的版本(现在几乎很少见了),可以用array_map()来实现,虽然底层还是有迭代,但代码层面看不到循环:
$ids = array_map(function($item) { return $item['ID']; }, $resultArray);
不过这个方案的性能略逊于array_column(),所以优先推荐前两个方案。
总结一下,优先选择直接用mysqli_fetch_column()从查询结果获取一维数组,这是最高效的;如果已经有了二维数组,就用array_column(),这是无循环且高效的降维方法。
内容的提问来源于stack exchange,提问作者David

