Php 如何在对象数组中找到max属性?
如何找到数组中对象的最大值? 假设我有一个这样的对象数组:Php 如何在对象数组中找到max属性?,php,arrays,object,Php,Arrays,Object,如何找到数组中对象的最大值? 假设我有一个这样的对象数组: $data_points = [$point1, $point2, $point3]; $max = max_attribute_in_array($data_points, 'value'); 在哪里 我想这样做: $data_points = [$point1, $point2, $point3]; $max = max_attribute_in_array($data_points, 'value'); 我知道我可以用fo
$data_points = [$point1, $point2, $point3];
$max = max_attribute_in_array($data_points, 'value');
在哪里
我想这样做:
$data_points = [$point1, $point2, $point3];
$max = max_attribute_in_array($data_points, 'value');
我知道我可以用
foreach
迭代数组,但有没有更优雅的方法使用内置函数?所有示例都假设$prop
是对象属性的名称,如示例中的值
:
function max_attribute_in_array($array, $prop) {
return max(array_map(function($o) use($prop) {
return $o->$prop;
},
$array));
}
获取每个数组元素并将对象的属性返回到新数组中array\u map
- 然后只需返回该数组上的
结果max
max
或min
或任何对数组进行操作的参数作为第三个参数:
function calc_attribute_in_array($array, $prop, $func) {
$result = array_map(function($o) use($prop) {
return $o->$prop;
},
$array);
if(function_exists($func)) {
return $func($result);
}
return false;
}
$max = calc_attribute_in_array($data_points, 'value', 'max');
$min = calc_attribute_in_array($data_points, 'value', 'min');
如果使用PHP>=7,则array\u column
可用于对象:
function max_attribute_in_array($array, $prop) {
return max(array_column($array, $prop));
}
以下是评论中的array\u reduce
:
$result = array_reduce(function($carry, $o) use($prop) {
$carry = max($carry, $o->$prop);
return $carry;
}, $array, -PHP_INT_MAX);
试试这个:
$point1 = new stdClass;
$point1->value = 0.2;
$point1->name = 'Bob';
$point2 = new stdClass;
$point2->value = 1.2;
$point2->name = 'Dave';
$point3 = new stdClass;
$point3->value = 0.8;
$point3->name = 'Steve';
$data_points = [$point1, $point2, $point3];
function max_attribute_in_array($data_points, $value='value'){
$max=0;
foreach($data_points as $point){
if($max < (float)$point->{$value}){
$max = $point->{$value};
}
}
return $max;
}
$max = max_attribute_in_array($data_points);
var_dump($max);
通过我的单元测试运行了它,工作起来就像做梦一样,感谢大家对PHP7的了解,唉,我选择了在这个项目中使用5.6,比如:
array\u reduce(function($carry,$o){$carry=max($carry,$o->$prop);return$carry;}$array,-PHP\u INT\u max)代码>