已知数组a:array (
  0 => 
  array (
    'stock_no' => 'SU13080800340',
    'adress' => 'B',
    'arr_time' => '2013-08-14 09:00:00',
    'c_type' => 'P32E',
    'cust_no' => '310F61VA5A',
    'mount_total' => '1',
    'total' => '16',
    'c1_time' => '2013-08-10 15:00:00',
    'packageno' => 'CVT121015001',
  ),
  1 => 
  array (
    'stock_no' => 'SU13080800340',
    'adress' => 'B',
    'arr_time' => '2013-08-14 09:00:00',
    'c_type' => 'P32E',
    'cust_no' => '310F61VA5B',
    'mount_total' => '2',
    'total' => '32',
    'c1_time' => '2013-08-10 15:00:00',
    'packageno' => 'CVT121015002',
  ),
  2 => 
  array (
    'stock_no' => 'SU13080800340',
    'adress' => 'B',
    'arr_time' => '2013-08-14 09:00:00',
    'c_type' => 'P32E',
    'cust_no' => '310F61VA5B',
    'mount_total' => '2',
    'total' => '32',
    'c1_time' => '2013-08-10 15:00:00',
    'packageno' => 'CVT121226001',
  ),
)
如何分别求得数组中的项cust_no对应的packageno的结果以及stock_no对应mount_total和total项求和的结果?
假设cust_no为310F61VA5A时,对应的packageno为CVT121225001。
    cust_no为310F61VA5B时,对应的packageno为CVT121225002,CVT121226001。stock_no为SU13080800340时,求得的mount_total结果为3(1+2),total结果为48(16+32)。如何达到这样的效果?

解决方案 »

  1.   


    $a = array (   0 =>    array (     'stock_no' => 'SU13080800340',     'adress' => 'B',     'arr_time' => '2013-08-14 09:00:00',     'c_type' => 'P32E',     'cust_no' => '310F61VA5A',     'mount_total' => '1',     'total' => '16',     'c1_time' => '2013-08-10 15:00:00',     'packageno' => 'CVT121015001',   ),   1 =>    array (     'stock_no' => 'SU13080800340',     'adress' => 'B',     'arr_time' => '2013-08-14 09:00:00',     'c_type' => 'P32E',     'cust_no' => '310F61VA5B',     'mount_total' => '2',     'total' => '32',     'c1_time' => '2013-08-10 15:00:00',     'packageno' => 'CVT121015002',   ),   2 =>    array (     'stock_no' => 'SU13080800340',     'adress' => 'B',     'arr_time' => '2013-08-14 09:00:00',     'c_type' => 'P32E',     'cust_no' => '310F61VA5B',     'mount_total' => '2',     'total' => '32',     'c1_time' => '2013-08-10 15:00:00',     'packageno' => 'CVT121226001',   ), );
    function foo1($cust_no,$a=array()){
    foreach($a as $each){
    if($each['cust_no'] == $cust_no){
    $res[] = $each['packageno'];
    }
    }
    if($res){
    return implode(",",$res);
    }else{
    return false;
    }
    }function foo2($stock_no,$a=array()){
    foreach($a as $each){
    if($each['stock_no'] == $stock_no){
    $mount_total[] = $each['mount_total'];
    $total[] = $each['total'];
    }
    }
    $mount_total = array_unique($mount_total); //去重复
    $total = array_unique($total);
    $res['mount_total'] = array_sum($mount_total);
    $res['total'] = array_sum($total);
    return $res;
    }
    var_export(foo1("310F61VA5B",$a));
    var_export(foo2("SU13080800340",$a));
    'CVT121015002,CVT121226001'
    array ( 'mount_total' => 3, 'total' => 48, ) 
      

  2.   

    $ar=
    array (
      0 => 
      array (
        'stock_no' => 'SU13080800340',
        'adress' => 'B',
        'arr_time' => '2013-08-14 09:00:00',
        'c_type' => 'P32E',
        'cust_no' => '310F61VA5A',
        'mount_total' => '1',
        'total' => '16',
        'c1_time' => '2013-08-10 15:00:00',
        'packageno' => 'CVT121015001',
      ),
      1 => 
      array (
        'stock_no' => 'SU13080800340',
        'adress' => 'B',
        'arr_time' => '2013-08-14 09:00:00',
        'c_type' => 'P32E',
        'cust_no' => '310F61VA5B',
        'mount_total' => '2',
        'total' => '32',
        'c1_time' => '2013-08-10 15:00:00',
        'packageno' => 'CVT121015002',
      ),
      2 => 
      array (
        'stock_no' => 'SU13080800340',
        'adress' => 'B',
        'arr_time' => '2013-08-14 09:00:00',
        'c_type' => 'P32E',
        'cust_no' => '310F61VA5B',
        'mount_total' => '2',
        'total' => '32',
        'c1_time' => '2013-08-10 15:00:00',
        'packageno' => 'CVT121226001',
      ),
    );
    foreach($ar as $v){
        $a[$v['cust_no']][]=$v['packageno'];
    $b[$v['stock_no']][]=$v['mount_total'];
    $c[$v['stock_no']][]=$v['total'];
    }
    print_r($a);
    print_r($b);
    print_r($c);
    Array
    (
        [310F61VA5A] => Array
            (
                [0] => CVT121015001
            )    [310F61VA5B] => Array
            (
                [0] => CVT121015002
                [1] => CVT121226001
            ))
    Array
    (
        [SU13080800340] => Array
            (
                [0] => 1
                [1] => 2
                [2] => 2
            ))
    Array
    (
        [SU13080800340] => Array
            (
                [0] => 16
                [1] => 32
                [2] => 32
            ))
      

  3.   

    第一个问题 循环数组 判断每一个cust_no字段的值为给定值的数组元素的packageno的值加起来 就是你要的结果.  第二个问题 循环数组 判断每一个stock_no字段的值为给定值的数组元素的两个要求字段的值存入数组,循环结束后分别去除重复的然后相加
      

  4.   

    $a = array (
      0 => 
      array (
        'stock_no' => 'SU13080800340',
        'adress' => 'B',
        'arr_time' => '2013-08-14 09:00:00',
        'c_type' => 'P32E',
        'cust_no' => '310F61VA5A',
        'mount_total' => '1',
        'total' => '16',
        'c1_time' => '2013-08-10 15:00:00',
        'packageno' => 'CVT121015001',
      ),
      1 => 
      array (
        'stock_no' => 'SU13080800340',
        'adress' => 'B',
        'arr_time' => '2013-08-14 09:00:00',
        'c_type' => 'P32E',
        'cust_no' => '310F61VA5B',
        'mount_total' => '2',
        'total' => '32',
        'c1_time' => '2013-08-10 15:00:00',
        'packageno' => 'CVT121015002',
      ),
      2 => 
      array (
        'stock_no' => 'SU13080800340',
        'adress' => 'B',
        'arr_time' => '2013-08-14 09:00:00',
        'c_type' => 'P32E',
        'cust_no' => '310F61VA5B',
        'mount_total' => '2',
        'total' => '32',
        'c1_time' => '2013-08-10 15:00:00',
        'packageno' => 'CVT121226001',
      ),
    );
    $res = array();
    foreach($a as $item) {
      if(! isset($res[$item['stock_no']][$item['cust_no']])) {
        $res[$item['stock_no']][$item['cust_no']] = $item;
      }else {
        $res[$item['stock_no']][$item['cust_no']]['mount_total'] += $item['mount_total'];
        $res[$item['stock_no']][$item['cust_no']]['total'] += $item['total'];
        $res[$item['stock_no']][$item['cust_no']]['packageno'] .= ',' .$item['packageno'];
      }
    }
    foreach($res as &$item) $item = array_values($item);
    print_r($res);Array
    (
        [SU13080800340] => Array
            (
                [0] => Array
                    (
                        [stock_no] => SU13080800340
                        [adress] => B
                        [arr_time] => 2013-08-14 09:00:00
                        [c_type] => P32E
                        [cust_no] => 310F61VA5A
                        [mount_total] => 1
                        [total] => 16
                        [c1_time] => 2013-08-10 15:00:00
                        [packageno] => CVT121015001
                    )            [1] => Array
                    (
                        [stock_no] => SU13080800340
                        [adress] => B
                        [arr_time] => 2013-08-14 09:00:00
                        [c_type] => P32E
                        [cust_no] => 310F61VA5B
                        [mount_total] => 4
                        [total] => 64
                        [c1_time] => 2013-08-10 15:00:00
                        [packageno] => CVT121015002,CVT121226001
                    )        ))
      

  5.   


    第一项OK,但是mount_total和total的求和结果不对,我要的是stock_no为SU13080800340时,求得的mount_total结果为3(1+2),total结果为48(16+32)。
      

  6.   


    我想要得到的stockno的求和结果是mount_total为3(2+1),total结果为48(16+32)。
      

  7.   

    楼主这种问题  应该算是比较基础的  我有点好奇为什么会纠结于
    Array
            (
                [0] => 16
                [1] => 32
                [2] => 32
            )
    这种数组的加和? 你的需求应该是去了重复求和....  一个PHP函数的事情...
      

  8.   

    你的数组中三个stock_no的值不是一样的吗,都为 SU13080800340 吧,难道我眼花了?
      

  9.   

    那是你的数据给错了
        'cust_no' => '310F61VA5A',
        'mount_total' => '1',
        'total' => '16',    'cust_no' => '310F61VA5B',
        'mount_total' => '2',
        'total' => '32',    'cust_no' => '310F61VA5B',
        'mount_total' => '2',
        'total' => '32',