我有一个循环来填充$positions数组,如下所示:
array_push($positions, ["id" => $p->id, "distance"=> $distance, "date" => $p->date]);然后我找到了最小键'distance‘,如下所示:
$min = min(array_column($positions,'distance'));现在我想从建立的'distance‘中获取对应的'id’。
我该怎么做呢??
发布于 2020-06-04 06:35:10
未经测试:
$distances = array_column($positions,'distance', 'id');
$min = min($distances);
$id = array_search($min, $distances);这将获取距离并创建一个以id值作为键的新数组。然后,它获取最小值并使用它来搜索与其对应的键。
我不确定如果你有多个项目具有相同的最小值,结果会是什么,所以你应该测试一下。但是,如果您希望所有if都具有最小值,则可以使用带有可选search_value参数的array_keys()。
$ids = array_keys($distances, $min);发布于 2020-06-04 06:38:25
考虑使用自定义算法(这具有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,请让我知道,我会发布另一个算法。
发布于 2020-06-04 06:44:13
您还可以按id进行索引,升序排序并获得第一个键:
$distances = array_column($positions, 'distance', 'id');
asort($distances);
$id = key($distances);https://stackoverflow.com/questions/62183763
复制相似问题