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