2017-04-11 55 views
1

我正在寻找最短的方法来查找包含最高值sort的对象。PHP查找对象在数组中的值最高

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

http://php.net/manual/en/function.array-reduce.php – splash58

回答

1

最后我做到了。

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