84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
以下数组:
$arr = array( 0 => array(u_id => 1, time => 1), 1 => array(u_id => 1, time => 2), 2 => array(u_id => 2, time => 4), 3 => array(u_id => 2, time => 3) )
以上数组是不规律的,我想找出数组中u_id相同,但是time最大的值,请问应该怎么找?多谢啦。
ringa_lee
// ###思路是如果id对应的time没有值,那么赋值;如果有,那么做比较,大则替换。 $ids_arr = []; foreach ($arr as $k => $v) { if (!isset($ids_arr[$v['u_id']])) { $ids_arr[$v['u_id']] = $v['time']; } else { $v['time'] > $ids_arr[$v['u_id']] && $ids_arr[$v['u_id']] = $v['time']; } } print_r($ids_arr);
以上。
// 循环比较,你试试
$result = []; function test($arr, $opt) { global $result; static $opts= []; if(in_array($opt, $opts)) return; $opts[] = $opt; $max = 0; foreach ($arr as $key => $value) { if(reset($value) == $opt ) if($max < $next = next($value)) $max = $next; } $result[$opt] = $max; } for($i = 0;$i<count($arr);$i++) { test($arr, $arr[$i]['u_id']); } print_r($result);
$res=[]; $arr = array( 0 => array('u_id' => 1, 'time' => 1), 1 => array('u_id' => 1, 'time' => 2), 2 => array('u_id' => 2, 'time' => 4), 3 => array('u_id' => 2, 'time' => 3) ); foreach($arr as $k=>$v){ if(!isset($res[$v['u_id']])) { $res[$v['u_id']] = $v; }else { if($v['time'] > $res[$v['u_id']]['time']){ $res[$v['u_id']]['time'] = $v['time']; } } } print_r(array_values($res)); Array ( [0] => Array ( [u_id] => 1 [time] => 2 ) [1] => Array ( [u_id] => 2 [time] => 4 ) )
foreach ($arr as $k => $v) { if ($k === 0) { continue; } if ($arr[$k-1]['u_id'] === $v['u_id']) { if ($arr[$k-1]['time'] < $v['time']) { unset($arr[$k-1]); continue; } $arr[$k]['time'] = $arr[$k-1]['time']; unset($arr[$k-1]); } }
以上。
// 循环比较,你试试