首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当搜索最小值时,从关联数组返回array_column

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

Stack Overflow用户
提问于 2020-06-04 06:28:29
回答 3查看 75关注 0票数 0

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

代码语言:javascript
复制
array_push($positions, ["id" => $p->id, "distance"=> $distance, "date" => $p->date]);

然后我找到了最小键'distance‘,如下所示:

代码语言:javascript
复制
$min = min(array_column($positions,'distance'));

现在我想从建立的'distance‘中获取对应的'id’。

我该怎么做呢??

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-06-04 06:35:10

未经测试:

代码语言:javascript
复制
$distances = array_column($positions,'distance', 'id');
$min = min($distances);
$id = array_search($min, $distances);

这将获取距离并创建一个以id值作为键的新数组。然后,它获取最小值并使用它来搜索与其对应的键。

我不确定如果你有多个项目具有相同的最小值,结果会是什么,所以你应该测试一下。但是,如果您希望所有if都具有最小值,则可以使用带有可选search_value参数的array_keys()

代码语言:javascript
复制
$ids = array_keys($distances, $min);
票数 0
EN

Stack Overflow用户

发布于 2020-06-04 06:38:25

考虑使用自定义算法(这具有n的计算复杂度,其中使用您的方法是2n,因此速度慢2倍):

代码语言:javascript
复制
$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,请让我知道,我会发布另一个算法。

票数 1
EN

Stack Overflow用户

发布于 2020-06-04 06:44:13

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

代码语言:javascript
复制
$distances = array_column($positions, 'distance', 'id');
asort($distances);
$id = key($distances);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62183763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档