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

如何在PHP多维数组中获取distance字段最小值对应的键名

解决PHP多维数组中找最小distance对应键名的问题

嗨,这个场景我之前处理过,确实直接用min()函数搞不定多维数组的情况,咱们来一步步解决它~

首先,你的数组结构是外层键为地点标识,内层包含distance字段,咱们的目标是找出distance最小的那个外层键名。这里有两种实用的方案:

方案一:用array_column快速提取(PHP 5.5+)

这是最简洁的方法,利用array_column从多维数组中提取指定字段并保留原键,再结合min()和array_search()就能搞定:

// 你的原始数组
$locations = [
    'utrecht_cs' => [
        'name' => 'utrecht_cs',
        'address' => '3511 AX Utrecht, Netherlands',
        'distance' => 95
    ],
    'groningen_cs' => [
        'name' => 'groningen_cs',
        'address' => '9726 AC Groningen, Netherlands',
        'distance' => 102.47
    ],
    'zwolle_cs' => [
        'name' => 'zwolle_cs',
        'address' => '8011 CW Zwolle, Netherlands',
        'distance' => 2.54
    ]
];

// 提取所有distance值,同时保留原数组的键
$distanceList = array_column($locations, 'distance');

// 获取最小的distance值
$minDistance = min($distanceList);

// 找到这个最小值对应的原键名
$closestLocationKey = array_search($minDistance, $distanceList);

// 输出结果:zwolle_cs
echo $closestLocationKey;

这种方法代码简洁,可读性高,适合主流PHP版本。

方案二:循环遍历(兼容所有PHP版本)

如果你的项目还在使用较老的PHP版本(低于5.5),或者你更倾向于手动控制逻辑,用循环遍历的方式更稳妥:

// 初始化变量:存放最小距离对应的键名,以及初始最小距离设为PHP最大整数
$closestLocationKey = null;
$minDistance = PHP_INT_MAX;

foreach ($locations as $key => $item) {
    // 比较当前distance和记录的最小值
    if ($item['distance'] < $minDistance) {
        // 更新最小值和对应键名
        $minDistance = $item['distance'];
        $closestLocationKey = $key;
    }
}

// 输出结果:zwolle_cs
echo $closestLocationKey;

小补充

如果存在多个distance相同且都是最小值的情况,上面两种方法都会返回第一个遇到的键名。如果需要收集所有符合条件的键名,可以稍微修改代码,把符合的键存入一个数组中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:56:26