花了点时间写了几个数组结构变换的小例子
- 把$arr转换成$newArr的形式,月份有的话则取原来的值,没有的月份则值赋为0,month要满12个月 month1-month12,sum是各个月份键值的和
$arr = Array (
'冯向丽' => Array (
0 => Array ( 'month' => 11, 'num' => 1 ),
1 => Array ( 'month' => 12, 'num' => 2 )
),
'刘定金' => Array (
0 => Array ( 'month' => 11, 'num' => 5 ),
1 => Array ( 'month' => 12, 'num' => 13 )
),
'单大寨' => Array (
0 => Array ( 'month' => 10, 'num' => 1 ),
1 => Array ( 'month' => 12, 'num' => 2 )
)
);
$newArr = Array (
0 => Array (
'cPerName' => '冯向丽',
'month1' => 0,
'month2' => 0,
'month3' => 0,
'month4' => 0,
'month5' => 0,
'month6' => 0,
'month7' => 0,
'month8' => 0,
'month9' => 0,
'month10' => 0,
'month11' => 1,
'month12' => 2,
'sum' =>3
),
1 => Array (
'cPerName' => '刘定金',
'month1' => 0,
'month2' => 0,
'month3' => 0,
'month4' => 0,
'month5' => 0,
'month6' => 0,
'month7' => 0,
'month8' => 0,
'month9' => 0,
'month10' => 0,
'month11' => 5,
'month12' => 13,
'sum' =>18
),
2 => Array (
'cPerName' => '单大寨',
'month1' => 0,
'month2' => 0,
'month3' => 0,
'month4' => 0,
'month5' => 0,
'month6' => 0,
'month7' => 0,
'month8' => 0,
'month9' => 0,
'month10' => 1,
'month11' => 0,
'month12' => 2,
'sum' =>3
)
);
解决方法:
$index = 0;
foreach ($arr as $k => $v) {
$sum = 0;
$month[$index]['cPerName']=$k;
for ($i=1; $i <13 ; $i++){
$month[$index]['month'.$i] = 0;
}
foreach ($v as $key => $value) {
$month[$index]['month'.$value['month']] = $value['month'];
$sum+=$value['num'];
}
$month[$index]['sum'] = $sum;
$index++;
}
- 把$arr1转换成$newArr2的形式,月份有的话则取原来的值,没有的月份则值赋为0,month要满12个月
$arr1 = Array (
0 => Array ( 'month' => 1, 'num4' => 15, 'num5' => 286079, 'num6' => 119 ),
1 => Array ( 'month' => 2, 'num4' => 6, 'num5' => 108995, 'num6' => 45 ),
2 => Array ( 'month' => 4 ,'num4' => 11, 'num5' => 148594, 'num6' => 92 ),
3 => Array ( 'month' => 5, 'num4' => 18, 'num5' => 428394, 'num6' => 244 ),
4 => Array ( 'month' => 6, 'num4' => 33, 'num5' => 562007, 'num6' => 280 ),
5 => Array ( 'month' => 7, 'num4' => 54, 'num5' => 621773, 'num6' => 366 ),
6 => Array ( 'month' => 8, 'num4' => 51, 'num5' => 580213, 'num6' => 352 ),
7 => Array ( 'month' => 10, 'num4' => 31 ,'num5' => 420974, 'num6' => 278 ),
8 => Array ( 'month' => 11, 'num4' => 18, 'num5' => 344065, 'num6' => 129 ),
9 => Array ( 'month' => 12, 'num4' => 18, 'num5' => 344065, 'num6' => 129 )
);
$newArr2 = Array (
1 => Array ( 'month' => 1, 'num4' => 15, 'num5' => 286079, 'num6' => 119 ) ,
2 => Array ( 'month' => 2, 'num4' => 6, 'num5' => 108995, 'num6' => 45 ),
3 => Array ( 'month' => 3, 'num4' => 0, 'num5' => 0, 'num6' => 0 ) ,
4 => Array ( 'month' => 4, 'num4' => 11, 'num5' => 148594, 'num6' => 92 ),
5 => Array ( 'month' => 5, 'num4' => 18, 'num5' => 428394, 'num6' => 244 ) ,
6 => Array ( 'month' => 6, 'num4' => 33, 'num5' => 562007, 'num6' => 280 ),
7 => Array ( 'month' => 7, 'num4' => 54, 'num5' => 621773, 'num6' => 366 ),
8 => Array ( 'month' => 8, 'num4' => 51, 'num5' => 580213, 'num6' => 352 ),
9 => Array ( 'month' => 9, 'num4' => 0, 'num5' => 0, 'num6' => 0 ) ,
10 => Array ( 'month' => 10, 'num4' => 31, 'num5' => 420974, 'num6' => 278 ) ,
11 => Array ( 'month' => 11, 'num4' => 18, 'num5' => 344065, 'num6' => 129 ),
12 => Array ( 'month' => 12, 'num4' => 18, 'num5' => 344065, 'num6' => 129 )
);
解决方法:
$indexnew = 0;
for ($i=1; $i <13 ; $i++) {
$tmparr[$i] = array('month' => $i,'num4'=>0,'num5'=>0,'num6'=>0 );
}
foreach ($arr1 as $key => $value) {
if($value['month']>0){
$tmparr[$value['month']] = $value;
}
}
- 把$arr2转换成$newArr3的形式,名称去重
$arr2 = Array (
0 => Array (
'cPerName' => '冯向丽',
'month' => 1
),
1 => Array (
'cPerName' => '刘定金',
'month' => 2,
),
2 => Array (
'cPerName' => '单大寨',
'month' => 4
),
3 => Array (
'cPerName' => '单大寨',
'month' => 6
),
4 => Array (
'cPerName' => '冯向丽',
'month' => 4
)
);
$newArr3 = Array('冯向丽'=>'冯向丽','刘定金'=>'刘定金','单大寨'=>'单大寨');
解决方法:
$filter = array();
foreach($arr2 AS $k=>$v){
if(!isset($filter[$v['cPerName']])){
$filter[$v['cPerName']] = $v['cPerName'];
}
}
把$arr2转换成$newArr4的形式,名称去重,并计算出现的次数
$arr2 = Array (
0 => Array (
'cPerName' => '冯向丽',
'month' => 1
),
1 => Array (
'cPerName' => '刘定金',
'month' => 2,
),
2 => Array (
'cPerName' => '单大寨',
'month' => 4
),
3 => Array (
'cPerName' => '单大寨',
'month' => 6
),
4 => Array (
'cPerName' => '冯向丽',
'month' => 4
)
);
$newArr4 = Array(
0 => array('cPerName' =>'冯向丽','num'=>2 ),
0 => array('cPerName' =>'刘定金','num'=>1 ),
0 => array('cPerName' =>'单大寨','num'=>2 )
);
解决方法:
$filter = array();
foreach($arr2 AS $k=>$v){
if(!isset($filter[$v['cPerName']])){
$filter[$v['cPerName']] = $v['cPerName'];
}
}
$filter1=array();
$num1 = 0;
foreach ($filter as $v) {
$num = 0;
foreach ($arr2 as $key => $value) {
if($v==$value['cPerName']){
$num++;
}
}
$filter1[$num1] = array('cPerName'=>$v,'num' => $num);
$num1++;
}
把$arr3转换成$newArr5的形式,取前三条数据 剩下的变成其它并合其它的num数量
$arr3 = Array (
0 => array('num' =>1),
1 => array('num' =>2),
2 => array('num' =>2),
3 => array('num' =>2),
4 => array('num' =>2),
5 => array('num' =>2)
);
$newArr5 = Array (
0 => array('cPerName' => '冯向丽' ,'num' =>1),
1 => array('cPerName' => '刘定金' ,'num' =>2),
2 => array('cPerName' => '单大寨' ,'num' =>2),
3 => array('cPerName' => '其它' ,'num' =>6)
);
解决方法:
$sum2 = 0;
$sum1 = 0;
$tmp = array();
for($i=0; $i<count($arr3);$i++){
if($i<3){
$tmp[$i]=$arr3[$i];
$sum1+=$arr3[$i]['num'];
}
$sum2+=$arr3[$i]['num'];
}
$tmp[3] = array('cPerName' => '其它' ,'num' => $sum2-$sum1) ;
把$arr4和$arr5转换成$newArr6的形式
$arr4 = Array (
0 => array('num' =>1),
1 => array('num' =>2),
2 => array('num' =>3)
);
$arr5 = Array (
0 => array('num' =>4),
1 => array('num' =>5),
2 => array('num' =>6),
3 => array('num' =>7)
);
$newArr6 = Array(
0 => array('num' =>1),
1 => array('num' =>2),
2 => array('num' =>3),
3 => array('num' =>4),
4 => array('num' =>5),
5 => array('num' =>6),
6 => array('num' =>7)
);
解决方法:
$tmp = array();
$num = 0;
for ($i=0; $i <count($arr4)+count($arr5); $i++) {
if($i<count($arr4)){
$tmp[$i] = array('num' => $arr4[$i]);
}else{
$tmp[$i] = array('num' => $arr5[$num]);
$num++;
}
}
求出$arr6的最大值
$arr6 = Array (
0 => array('num' =>1),
1 => array('num' =>2),
2 => array('num' =>3),
3 => array('num' =>5),
4 => array('num' =>7),
5 => array('num' =>6)
);
解决方法:
foreach ($arr6 as $k => $v) {
$tmp[]=$v['num'];
}
echo max($tmp);