我有一个循环来填充$positions数组,如下所示:
array_push($positions, ["id" => $p->id, "distance"=> $distance, "date" => $p->date]);
然后我找到了最小键"距离",如下所示:
$min = min(array_column($positions,'distance'));
现在我想从"距离"中获取相应的"id"。
我该怎么做??
考虑使用自定义算法(这具有n
的计算复杂度,其中使用您的方式是2n
,因此慢 2 倍(:
$positions= [...];
$min = $positions[0]['distance'];
$elements = [0];
foreach ($positions as $pos) {
if ($pos["distance"] < $min) {
$elements = [$pos];
$min = $pos["distance"];
} elseif ($pos["distance"] == $min) {
$elements[] = $pos;
}
}
但是,如果您严格需要ids
,请告诉我,我将发布其他算法。
未经测试:
$distances = array_column($positions,'distance', 'id');
$min = min($distances);
$id = array_search($min, $distances);
这将获取距离并创建一个新数组,并将id
值作为键。然后,它获取最小值并使用它来搜索与其对应的键。
我不确定如果您有多个具有相同最小值的项目会是什么结果,因此您应该进行测试。但是,如果您想要所有带有最小值的 ID,则可以改用带有可选search_value
参数的array_keys()
。
$ids = array_keys($distances, $min);
您也可以按id
索引,升序排序并获取第一个键:
$distances = array_column($positions, 'distance', 'id');
asort($distances);
$id = key($distances);