Дубликаты в массиве - PullRequest
       0

Дубликаты в массиве

0 голосов
/ 15 ноября 2011

У меня есть массив, который выглядит так:

$array[1]['first__name'] = 'john'; 
$array[1]['last_name']   = 'anderson'; 
$array[1]['sum']         = 100; 

$array[2]['first__name'] = 'john'; 
$array[2]['last_name']   = 'anderson'; 
$array[2]['sum']         = 200; 

$array[3]['first__name'] = 'julie'; 
$array[3]['last_name']   = 'Scott'; 
$array[3]['sum']         = 300; 

$array[4]['first__name'] = 'Eva'; 
$array[4]['last_name']   = 'Scott'; 
$array[4]['sum']         = 300; 

$array[5]['first__name'] = 'john'; 
$array[5]['last_name']   = 'anderson'; 
$array[5]['sum']         = 300; 

Я хочу сравнить значения сумм, где first_name = john, last_name = anderson и сохранить наибольшее. Остальное я бы хотел удалить.

Ответы [ 3 ]

1 голос
/ 15 ноября 2011
$highest = 0;
foreach ($array as $v){
  if ($v['first_name'] == 'john' && $v['last_name'] == 'anderson'){
    if ($v['sum'] > $highest){$highest = $v['sum'];
  }
}
echo $highest;
0 голосов
/ 15 ноября 2011

Это тоже будет работать:)

$array[1]['first_name'] = 'john'; 
$array[1]['last_name']   = 'anderson'; 
$array[1]['sum']         = 100; 

$array[2]['first_name'] = 'john'; 
$array[2]['last_name']   = 'anderson'; 
$array[2]['sum']         = 300; 

$array[3]['first_name'] = 'julie'; 
$array[3]['last_name']   = 'Scott'; 
$array[3]['sum']         = 300; 

$array[4]['first_name'] = 'Eva'; 
$array[4]['last_name']   = 'Scott'; 
$array[4]['sum']         = 300; 

$array[5]['first_name'] = 'john'; 
$array[5]['last_name']   = 'anderson'; 
$array[5]['sum']         = 200; 

$cond = array('first_name' => 'john', 'last_name' => 'anderson');

array_walk($array, function($node, $key) use ($cond, &$array) {
    foreach($cond as $k => $v) {
        if(!isset($node[$k]) || $node[$k] != $v) {
            unset($array[$key]);
        }
    }
});
uasort($array, function($a, $b){
    return intval($a['sum']) - intval($b['sum']);
});

$result = end($array);
0 голосов
/ 15 ноября 2011

Как насчет этого?

$scores = array();
foreach( $array as $row ) {
    $name = $row['first_name'] . ' ' . $row['last_name'];
    if( !isset( $scores[$name] ) || ( $row['sum'] > $scores[$name] ) ) {
        $scores[$name] = $row['sum'];
    }
}
...