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



我有一个循环来填充$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);

最新更新