当搜索最小值时,从关联数组返回array_column

问题描述 投票:0回答:3

我有一个循环来填充$ positions数组,如下所示:

array_push($positions, ["id" => $p->id, "distance"=> $distance, "date" => $p->date]);

然后我发现最小键'距离'是这样的:

$min = min(array_column($positions,'distance'));

现在,我想从建立的“距离”中获取对应的“ id”。

我该怎么做?

php arrays min
3个回答
0
投票

未经测试:

$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);

0
投票

考虑使用自定义算法(这是复杂度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,请告诉我,我将发布其他算法


0
投票

您也可以按id进行索引,升序排序并获得第一个键:

$distances = array_column($positions, 'distance', 'id');
asort($distances);
$id = key($distances);
© www.soinside.com 2019 - 2024. All rights reserved.