【发布时间】:2011-08-05 12:49:20
【问题描述】:
这是我的数组样本$data[][];
Array( [0] => Array ( [id] => 1349
[rating1] => 1.9378838029981E-7
[rating2] => 1.1801796607774 )
[1] => Array ( [id] => 1350
[rating1] => 5.5499981876923E-7
[rating2] => 1.5121329727308 )
[2] => Array ( [id] => 1377
[rating1] => 0.00023952225410117
[rating2] => 2.1947077830236 )
[3] => Array ( [id] => 1378
[rating1] => 0.00022982302863634
[rating2] => 2.2135588326622 )
[4] => Array ( [id] => 1379
[rating1] => 0.00026272979843585
[rating2] => 2.2388295595073 )
[5] => Array ( [id] => 1380
[rating1] => 0.0002788640872546
[rating2] => 2.1815325502993 )
)
我想找到max($data[][rating?]),但返回$data[id][max_rating?],即与max 值关联的id。
找到一个特定的最大值很容易,比如rating1,我使用array_reduce 如下(灵感来自this SO):
$max = array_reduce($data, function($a, $b) {
return $a > $b['rating1'] ? $a : $b['rating1'];
});
现在我有两个问题:
1.如何扩展 array_reduce 以包含 rating2 ?我也有其他评分X。
2. 我不想要max 值,而是与max 关联的$data[][id]。
我不太关心 Q1,但第二个很重要,因为我不想再次搜索数组以获取关联 $data[][id]。
一种思路是使用array_map 而不是array_reduce,但我想不出一个可以同时传递[id] 和[rating?] 的版本。此外,当我尝试同时max() 多个rating? 时也会出现问题,因为每个评分都会有不同的max,而这又会与不同的[id] 相关联。
编辑:为了清楚起见,我希望所有各自的 ids 与每个 rating? 的各自 max 相关联
【问题讨论】:
-
这看起来像数据库中的表。如果是这样,请在数据库级别进行过滤!
-
不,这不是,根据表中的数据,我计算 rating1,rating2... 并将该评分添加到 mysql_fetch_array() 已经可用的数组中。
-
你也可以在 sql 中进行评分计算,你知道的。无论如何,看看我的答案,看看它是否适合你
-
嗯,让我们说不可能,然后就这样吧。我正在考虑你的建议。在此先感谢:)
-
如果 [id] 是唯一的,是否有任何理由不使用 id 作为数组键而不是将其作为子数组中的字段?所以
array(1349 => array ('rating1'=>....,'rating2'=>....),1350=> array.....
标签: php multidimensional-array mapreduce max