PHP数据结构的变化

花了点时间写了几个数组结构变换的小例子

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

猜你喜欢

转载自blog.csdn.net/qq_39586877/article/details/85127741