如何使用array_column函数,通过货币code从索引数组中获取汇率记录?
这问题在处理货币汇率这类多维数组时太常见了,我来给你一步步解决:
一、把索引数组转成以货币Code为键的关联数组
要实现$array['USD']['rate']这种调用方式,本质就是把原数组的code字段作为新数组的键,保留每个子数组的完整数据。这里有两种高效的方法:
方法1:用array_column()一步到位(推荐)
PHP 5.5+自带的array_column()函数完美适配这个场景,当你把第三个参数设为'code',第二个参数传null时,它会自动把每个子数组的code值作为新数组的键,同时保留整个子数组作为对应的值:
// 你的原始数组 $originalArray = [ ['code' => 'BTC', 'name' => 'Bitcoin', 'rate' => 1], ['code' => 'BCH', 'name' => 'Bitcoin Cash', 'rate' => 7.06364], ['code' => 'USD', 'name' => 'US Dollar', 'rate' => 8185.84] ]; // 转换为以code为键的关联数组 $keyedArray = array_column($originalArray, null, 'code'); // 现在就能直接通过code访问了! echo $keyedArray['USD']['rate']; // 输出 8185.84 echo $keyedArray['BCH']['name']; // 输出 Bitcoin Cash
方法2:手动循环(兼容老版本PHP)
如果你的项目还在使用PHP 5.5以下的版本(现在真的很少见了,但还是提一下),可以用foreach循环手动构建新数组:
$keyedArray = []; foreach ($originalArray as $currency) { $keyedArray[$currency['code']] = $currency; } // 同样支持code直接访问 echo $keyedArray['BTC']['rate']; // 输出 1
二、用
array_column()灵活获取指定记录 array_column()的核心能力是从多维数组中提取指定列,结合参数还能玩出更多花样:
1. 直接提取所有汇率(以Code为键)
如果你只需要汇率值,不需要完整的货币信息,可以直接提取rate列并把code作为键,这样能直接通过$rateArray['USD']拿到汇率:
$rateArray = array_column($originalArray, 'rate', 'code'); echo $rateArray['USD']; // 直接输出 8185.84
2. 提取单一列的所有值
比如只需要所有货币的名称列表:
$currencyNames = array_column($originalArray, 'name'); // 结果:Array ( [0] => Bitcoin [1] => Bitcoin Cash [2] => US Dollar )
3. 快速获取单个货币的完整记录
如果不想转换整个数组,只想直接拿到某一个货币的完整数据,可以结合array_filter()和reset():
// 筛选出USD的记录 $usdRecord = array_filter($originalArray, function($item) { return $item['code'] === 'USD'; }); // 因为array_filter返回的是索引数组,用reset()取出第一个元素 $usdRecord = reset($usdRecord); echo $usdRecord['rate']; // 输出 8185.84
不过还是推荐先把数组转成以code为键的形式,之后每次访问都是O(1)的时间复杂度,比每次过滤高效得多,尤其是数组数据量较大的时候。
内容的提问来源于stack exchange,提问作者Saddam Azad
相关产品推荐
相关产品推荐

