Return array_column 从关联数组搜索最小值

Return array_column from an associative array when a search a min value

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

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

然后我找到了这样的最小键 'distance':

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

现在我想从'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"];
   } elseif ($pos["distance"] == $min) {
       $elements[] = $pos;
   }
}

但如果您确实需要 ids,请告诉我,我会 post 其他算法。

您还可以按 id 索引,升序排序并获取第一个键:

$distances = array_column($positions, 'distance', 'id');
asort($distances);
$id = key($distances);