84669인 학습
152542인 학습
20005인 학습
5487인 학습
7821인 학습
359900인 학습
3350인 학습
180660인 학습
48569인 학습
18603인 학습
40936인 학습
1549인 학습
1183인 학습
32909인 학습
有个二维数组:
$arr = array( array('num'=>5,'period'=>3), array('num'=>10,'period'=>3), array('num'=>15,'period'=>9) );
对period相同的值的数组,对num求和,怎么处理变成:
$arr = array( array('num'=>15,'period'=>3), array('num'=>15,'period'=>9) );
业精于勤,荒于嬉;行成于思,毁于随。
把 @mot 的答案补完优雅一下:
$arr = array( array('num'=>5,'period'=>3), array('num'=>10,'period'=>3), array('num'=>15,'period'=>9) ); $temp = array(); foreach($arr as $item) { list($n, $p) = array_values($item); $temp[$p] = array_key_exists($p, $temp) ? $temp[$p]+$n : $n; } $arr = array(); foreach($temp as $p => $n) $arr[] = array('num'=>$n, 'period'=>$p); print_r($arr);
$tmp = array(); foreach( $arr as $one) { if( $tmp[$one['period']] ) $tmp[$one['period']] = $tmp[$one['period']] + $one['num']; else $tmp[$one['period']] = $one['num']; } $arr = array(); foreach ( $tmp as $key => $value ) $arr[] = array( 'num' => $value , 'period' => $key );
function merge($items){
$data = array(); foreach ($items as $v) { $p = $v['period']; if(array_key_exists($p, $data)){ $data[$p]['num'] += $v['num']; }else{ $data[$p] = array('num'=>$v['num'],'period'=>['period']); } } return $data = array_values($data); }
$arr1 = array( array('num'=>5,'period'=>3), array('num'=>10,'period'=>3), array('num'=>15,'period'=>9) ); $arr2 = array(); foreach($arr1 as $k1 => $v1) { if(empty($arr2)) { $arr2[] = $v1; } else { foreach ($arr2 as &$v2) { if($v1['period'] == $v2['period']) { $v2['num'] += $v1['num']; } else { $arr2[] = $v1; } } } }
<?php error_reporting(E_ALL); $arr = array( array('num'=>5, 'period'=>3), array('num'=>10,'period'=>3), array('num'=>15,'period'=>9) ); $result = array(); $arr = array_reduce($arr, function($prev, $val) use (&$result) { if (empty($prev)) { return $val; } if (isset($prev['period']) && $prev['period'] === $val['period']) { $prev['num'] += $val['num']; } else { $result[] = $val; $prev = array(); } empty($prev) || $result[] = $prev; return $prev; }, array()); print_r($result);
$arr = array( array('num'=>5,'period'=>3), array('num'=>10,'period'=>3), array('num'=>15,'period'=>9) ); $keyvalue = []; array_filter( $arr, function ($item) use (&$keyvalue) { if (array_key_exists($item['period'], $keyvalue)) { $keyvalue[$item['period']] = [ 'period' => $item['period'], 'num' => $item['num'] + $keyvalue[$item['period']]['num'] ]; return false; } else { $keyvalue[$item['period']] = [ 'period' => $item['period'], 'num' => $item['num'] ]; return true; } } ); var_dump(array_values($keyvalue));
感觉这样可能简单点。
把 @mot 的答案补完优雅一下:
$data = array();
foreach ($items as $v) {
$p = $v['period'];
if(array_key_exists($p, $data)){
$data[$p]['num'] += $v['num'];
}else{
$data[$p] = array('num'=>$v['num'],'period'=>['period']);
}
}
return $data = array_values($data);
}
感觉这样可能简单点。