PHP相当于lodash / underscore中的max函数

时间:2014-06-04 20:22:08

标签: php

对于lodash / underscore,是否有等效于max的PHP v5.5?基本上我希望能够做类似的事情:

$characters = [
  { 'name': 'barney', 'age': 36 },
  { 'name': 'fred',   'age': 40 }
];

max($characters, 'age');
// → { 'name': 'fred', 'age': 40 };

5 个答案:

答案 0 :(得分:4)

可能是一种更流畅的方式,但这里有一个:

$result = $characters[array_search(max($a=array_column($characters, 'age')),$a)];

print_r($result);

(
    [name] => fred
    [age] => 40
)

使用排序:

array_multisort(array_column($characters, 'age'), SORT_DESC, $characters);

print_r($characters[0]);

注意:array_column需要PHP> = 5.5.0

答案 1 :(得分:4)

有一个名为Underscore.php的Underscore端口,它提供了最大功能(以及许多其他Underscore功能)。

来自documentation

$stooges = array(
  array('name'=>'moe', 'age'=>40),
  array('name'=>'larry', 'age'=>50),
  array('name'=>'curly', 'age'=>60)
);
__::max($stooges, function($stooge) { return $stooge['age']; });
// array('name'=>'curly', 'age'=>60)

答案 2 :(得分:2)

使用PHP 5.5的array_column()稍微调整原始数组的结构:

$characters = [
  [ 'name' => 'barney', 'age' => 36 ],
  [ 'name' => 'fred',   'age' => 40 ],
  [ 'name' => 'wilma',  'age' => 35 ],
  [ 'name' => 'betty',  'age' => 34 ],
];

arsort($simple = array_column($characters, 'age', 'name'));
$max = array_slice($simple, 0, 1);

var_dump($max);

答案 3 :(得分:1)

最简单的方法是迭代它们,看看最大的值是:

// All examples php 5.4+
$characters = [
  [ 'name'=> 'barney', 'age'=> 36 ],
  [ 'name'=> 'fred',   'age'=> 26 ],
  [ 'name'=> 'fred4',   'age'=> 23 ],
  [ 'name'=> 'fred5',   'age'=> 82 ],
  [ 'name'=> 'fred6',   'age'=> 24 ],
];

if(!isset($characters[0]['age']) { die('wrong array structure'); }

$maxLocation = 0;
foreach($characters as $position => $value) {
    if($value['age'] > $characters[$maxLocation]['age']) {
        $maxLocation = $position;
    }
} 

var_dump($characters[$maxLocation]);

如果你需要稍后采取行动,那么对它们进行订购可能会有些过分:

usort($characters, function($a, $b) {
    if($a['age'] === $b['age']) {
        return 0;
    }
    return $a['age'] < $b['age'] ? 1 : -1;
});

var_dump($characters[0]);

答案 4 :(得分:0)

阅读完所有解决方案后,我想这个问题的答案是:

  

不,PHP中没有任何等同于“max”的内容

但我会赞成每一个给我一个替代方法的答案。谢谢你们。