PHP查找对象在数组中具有最高值

时间:2017-04-11 07:52:16

标签: php arrays sorting

我正在寻找找到包含最高sort值的对象的最短路径。

array(5) {
  [0]=>
  object(stdClass)#212 (3) {
    ["id"]=>
    int(1)
    ["display_name"]=>
    string(8) "Activate"
    ["sort"]=>
    int(1)
  }
  [1]=>
  object(stdClass)#213 (3) {
    ["id"]=>
    int(2)
    ["display_name"]=>
    string(7) "Cutting"
    ["sort"]=>
    int(2)
  }
  [2]=>
  object(stdClass)#214 (3) {
    ["id"]=>
    int(3)
    ["display_name"]=>
    string(6) "Sewing"
    ["sort"]=>
    int(3)
  }
  [3]=>
  object(stdClass)#215 (3) {
    ["id"]=>
    int(4)
    ["display_name"]=>
    string(9) "Finishing"
    ["sort"]=>
    int(4)
  }
  [4]=>
  object(stdClass)#216 (3) {
    ["id"]=>
    int(5)
    ["display_name"]=>
    string(10) "Deactivate"
    ["sort"]=>
    int(5)
  }
}

以下是我的练习,但我认为它很复杂且代码很长。

// $gateways is the array contains a list of objects.

// find max sort value in array first
$max = max( array_map(function( $row ){ return $row->sort; }, $gateways) );

// then find in array object with sort value is equal to $max value
$filter = array_filter($gateways, function($row) use ($max){ 
  return $max == $row->sort;
});

if(count($filter)){
  $finalResult = array_shift($filter);
}

是否有更短的方法来执行此操作,如Javascript中的reduce

感谢。

1 个答案:

答案 0 :(得分:1)

最后我做到了。

$result = array_reduce($gateways, function($a, $b){
  return $a ? ($a->sort > $b->sort ? $a : $b) : $b;
});