是否有一个PHP v5.5等效的lodash/underscore max ?
基本上我希望能够做类似这样的事情:
$characters = [
{ 'name': 'barney', 'age': 36 },
{ 'name': 'fred', 'age': 40 }
];
max($characters, 'age');
// → { 'name': 'fred', 'age': 40 };
有一个名为Underscore.php的Underscore端口,它提供了max函数(以及许多其他的Underscore函数)。
从它的文档:
$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)
可能是一个更圆滑的方法,但这里有一个:
$result = $characters[array_search(max($a=array_column($characters, 'age')),$a)];
print_r($result);
(
[name] => fred
[age] => 40
)
使用sort:
array_multisort(array_column($characters, 'age'), SORT_DESC, $characters);
print_r($characters[0]);
注意:array_column
要求PHP>= 5.5.0
使用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);
最简单的方法是遍历它们,然后看看最大的值在哪里:
// 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]);
看了所有的答案,我猜这个问题的答案是:
不,PHP中没有与"max"等价的
但是我会为每个给我提供替代方法的答案投票。谢谢。