首頁  >  文章  >  後端開發  >  数组拆分问题

数组拆分问题

WBOY
WBOY原創
2016-06-23 14:22:54963瀏覽

假设数组a:

array (  0 =>   array (    'po_num' => 'DYNP-770266110-00',    'plant' => 'DYNP',    'get_date' => '2013-09-09',    'cust_no' => '12647212',    'total' => '60',    'snp' => '15',    'mount' => '4',    'lp_no' => 'P000000D',  ),  1 =>   array (    'po_num' => 'DYNP-770266110-00',    'plant' => 'DYNP',    'get_date' => '2013-09-09',    'cust_no' => '12654172',    'total' => '615',    'snp' => '15',    'mount' => '41',    'lp_no' => 'P000000D',  ),)


当满足整个total为一定条件时,将数组拆分开来。例中total为675,假设拆分条件为total满足225,也就是拆分为3个数组,如何能将数组拆分成这样?
//barray (  0 =>   array (    'po_num' => 'DYNP-770266110-00',    'plant' => 'DYNP',    'get_date' => '2013-09-09',    'cust_no' => '12647212',    'total' => '60',    'snp' => '15',    'mount' => '4',    'lp_no' => 'P000000D',  ),  1 =>   array (    'po_num' => 'DYNP-770266110-00',    'plant' => 'DYNP',    'get_date' => '2013-09-09',    'cust_no' => '12654172',    'total' => '165',    'snp' => '15',    'mount' => '11',    'lp_no' => 'P000000D',  ),)//carray (  0 =>   array (    'po_num' => 'DYNP-770266110-00',    'plant' => 'DYNP',    'get_date' => '2013-09-09',    'cust_no' => '12647212',    'total' => '225',    'snp' => '15',    'mount' => '15',    'lp_no' => 'P000000D',  ),)//darray (  0 =>   array (    'po_num' => 'DYNP-770266110-00',    'plant' => 'DYNP',    'get_date' => '2013-09-09',    'cust_no' => '12647212',    'total' => '225',    'snp' => '15',    'mount' => '15',    'lp_no' => 'P000000D',  ),)


回复讨论(解决方案)

$a = array (  0 =>   array (    'po_num' => 'DYNP-770266110-00',    'plant' => 'DYNP',    'get_date' => '2013-09-09',    'cust_no' => '12647212',    'total' => '60',    'snp' => '15',    'mount' => '4',    'lp_no' => 'P000000D',  ),  1 =>   array (    'po_num' => 'DYNP-770266110-00',    'plant' => 'DYNP',    'get_date' => '2013-09-09',    'cust_no' => '12654172',    'total' => '615',    'snp' => '15',    'mount' => '41',    'lp_no' => 'P000000D',  ),);$t = 225;foreach($a as $v) {  $t1 = $v['total'];  $v['total'] = $t1 % $t;  $res[] = $v;  $t1 -= $v['total'];  while($t1 >= $t) {    $v['total'] = $t;    $t1 -= $t;    $res[] = $v;  }}print_r($res);
Array
(
    [0] => Array
        (
            [po_num] => DYNP-770266110-00
            [plant] => DYNP
            [get_date] => 2013-09-09
            [cust_no] => 12647212
            [total] => 60
            [snp] => 15
            [mount] => 4
            [lp_no] => P000000D
        )

    [1] => Array
        (
            [po_num] => DYNP-770266110-00
            [plant] => DYNP
            [get_date] => 2013-09-09
            [cust_no] => 12654172
            [total] => 165
            [snp] => 15
            [mount] => 41
            [lp_no] => P000000D
        )

    [2] => Array
        (
            [po_num] => DYNP-770266110-00
            [plant] => DYNP
            [get_date] => 2013-09-09
            [cust_no] => 12654172
            [total] => 225
            [snp] => 15
            [mount] => 41
            [lp_no] => P000000D
        )

    [3] => Array
        (
            [po_num] => DYNP-770266110-00
            [plant] => DYNP
            [get_date] => 2013-09-09
            [cust_no] => 12654172
            [total] => 225
            [snp] => 15
            [mount] => 41
            [lp_no] => P000000D
        )

)

...

能不能变成这样?把3组区分出来。

1楼

如果mount项的值也发生改变,是不是和这个一样?

$t = 225;foreach($a as $v) {  $t1 = $v['total'];  $v['total'] = $t1 % $t;  $res[] = $v;  $t1 -= $v['total'];  while($t1 >= $t) {    $v['total'] = $t;    $t1 -= $t;    $res[] = $v;  }}print_r($res);

能不能获取这样的结果?
Array([0]=>Array(    [0] => Array        (            [po_num] => DYNP-770266110-00            [plant] => DYNP            [get_date] => 2013-09-09            [cust_no] => 12647212            [total] => 60            [snp] => 15            [mount] => 4            [lp_no] => P000000D        )    [1] => Array        (            [po_num] => DYNP-770266110-00            [plant] => DYNP            [get_date] => 2013-09-09            [cust_no] => 12654172            [total] => 165            [snp] => 15            [mount] => 41            [lp_no] => P000000D        ))[1] => Array        (            [po_num] => DYNP-770266110-00            [plant] => DYNP            [get_date] => 2013-09-09            [cust_no] => 12654172            [total] => 225            [snp] => 15            [mount] => 41            [lp_no] => P000000D        )[2] => Array        (            [po_num] => DYNP-770266110-00            [plant] => DYNP            [get_date] => 2013-09-09            [cust_no] => 12654172            [total] => 225            [snp] => 15            [mount] => 41            [lp_no] => P000000D        ))

当然可以,不过有什么意义呢?

$a = array (  0 =>   array (    'po_num' => 'DYNP-770266110-00',    'plant' => 'DYNP',    'get_date' => '2013-09-09',    'cust_no' => '12647212',    'total' => '60',    'snp' => '15',    'mount' => '4',    'lp_no' => 'P000000D',  ),  1 =>   array (    'po_num' => 'DYNP-770266110-00',    'plant' => 'DYNP',    'get_date' => '2013-09-09',    'cust_no' => '12654172',    'total' => '615',    'snp' => '15',    'mount' => '41',    'lp_no' => 'P000000D',  ),);$t = 225;$k = 0;foreach($a as $v) {  $t1 = $v['total'];  $v['total'] = $t1 % $t;  $res[$k][] = $v;  $t1 -= $v['total'];  while($t1 >= $t) {    $v['total'] = $t;    $t1 -= $t;    $res[++$k] = $v;  }}print_r($res);
Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [po_num] => DYNP-770266110-00
                    [plant] => DYNP
                    [get_date] => 2013-09-09
                    [cust_no] => 12647212
                    [total] => 60
                    [snp] => 15
                    [mount] => 4
                    [lp_no] => P000000D
                )

            [1] => Array
                (
                    [po_num] => DYNP-770266110-00
                    [plant] => DYNP
                    [get_date] => 2013-09-09
                    [cust_no] => 12654172
                    [total] => 165
                    [snp] => 15
                    [mount] => 41
                    [lp_no] => P000000D
                )

        )

    [1] => Array
        (
            [po_num] => DYNP-770266110-00
            [plant] => DYNP
            [get_date] => 2013-09-09
            [cust_no] => 12654172
            [total] => 225
            [snp] => 15
            [mount] => 41
            [lp_no] => P000000D
        )

    [2] => Array
        (
            [po_num] => DYNP-770266110-00
            [plant] => DYNP
            [get_date] => 2013-09-09
            [cust_no] => 12654172
            [total] => 225
            [snp] => 15
            [mount] => 41
            [lp_no] => P000000D
        )

)

当然可以,不过有什么意义呢?
我是想记循环输出的结果,foreach($res1 as $value)这样。

当然可以,不过有什么意义呢?
我用了array_chunk,怎么结果变成了这样?

Array(    [0] => Array        (            [0] => Array                (                    [0] => Array                        (                            [po_num] => DYNP-770266110-00                            [plant] => DYNP                            [get_date] => 2013-09-09                            [cust_no] => 12647212                            [total] => 60                            [snp] => 15                            [mount] => 4                            [lp_no] => P000000D                        )                    [1] => Array                        (                            [po_num] => DYNP-770266110-00                            [plant] => DYNP                            [get_date] => 2013-09-09                            [cust_no] => 12654172                            [total] => 165                            [snp] => 15                            [mount] => 11                            [lp_no] => P000000D                        )                )        )    [1] => Array        (            [0] => Array                (                    [po_num] => DYNP-770266110-00                    [plant] => DYNP                    [get_date] => 2013-09-09                    [cust_no] => 12654172                    [total] => 225                    [snp] => 15                    [mount] => 15                    [lp_no] => P000000D                )        )    [2] => Array        (            [0] => Array                (                    [po_num] => DYNP-770266110-00                    [plant] => DYNP                    [get_date] => 2013-09-09                    [cust_no] => 12654172                    [total] => 225                    [snp] => 15                    [mount] => 15                    [lp_no] => P000000D                )        ))

能否变成这样?
Array(    [0] => Array        (          [0] => Array          (              [po_num] => DYNP-770266110-00              [plant] => DYNP              [get_date] => 2013-09-09              [cust_no] => 12647212              [total] => 60              [snp] => 15              [mount] => 4              [lp_no] => P000000D           )          [1] => Array          (               [po_num] => DYNP-770266110-00               [plant] => DYNP               [get_date] => 2013-09-09               [cust_no] => 12654172               [total] => 165               [snp] => 15               [mount] => 11               [lp_no] => P000000D           )        )    [1] => Array        (            [0] => Array                (                    [po_num] => DYNP-770266110-00                    [plant] => DYNP                    [get_date] => 2013-09-09                    [cust_no] => 12654172                    [total] => 225                    [snp] => 15                    [mount] => 15                    [lp_no] => P000000D                )        )    [2] => Array        (            [0] => Array                (                    [po_num] => DYNP-770266110-00                    [plant] => DYNP                    [get_date] => 2013-09-09                    [cust_no] => 12654172                    [total] => 225                    [snp] => 15                    [mount] => 15                    [lp_no] => P000000D                )        ))

foreach($a as $v) {
  $t1 = $v['total'];
  $v['total'] = $t1 % $t;
  $res[$k][] = $v;
  $t1 -= $v['total'];
  while($t1 >= $t) {
    $v['total'] = $t;
    $t1 -= $t;
    $res[++$k] [] = $v;
  }
}

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn