2011-11-15 66 views
0

我有一個數組,看起來像這樣:重複陣列中的

$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 = johnlast_name = anderson的值並保存最高。剩下的我想刪除。

+1

想想你的總和(array_walk()?),然後應用[array_unique()](http://de3.php.net/manual/en /function.array-unique.php)? – breiti

+0

你需要走你的數組並對其進行比較......但是也許你可以在步驟中添加它的時候避免這種情況?你可以遞歸搜索數組的數組(first_name,last_name),如果sum更大,只需重寫sum? – pomaxa

回答

1
$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

這個怎麼樣?

$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']; 
    } 
} 
0

這也將工作:)

$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);