-1

さて、私は言わなければなりません、私は操作が十分に速くなければならないという感覚で迷子になっているので、高速なコンバインを探しています。

私の配列は次のようになります

Array
(
    [0] => Array
        (
            [id] => 35
            [item] => Ball Pen
            [qty] => 1
            [price] => 23
            [total] => 23
        )

    [1] => Array
        (
            [id] => 34
            [item] => Summer vest
            [qty] => 1
            [price] => 23
            [total] => 23
        )

    [2] => Array
        (
            [id] => 34
            [item] => Summer vest
            [qty] => 3
            [price] => 23
            [total] => 69
        )
)

そして、出力として、IDが複数回発生している場合は数量の合計が必要です

Array
(
    [35] => Array
        (
            [id] => 35
            [item] => Ball Pen
            [qty] => 1
            [price] => 23
            [total] => 23
        )

    [34] => Array
        (
            [id] => 34
            [item] => Summer vest
            [qty] => 4
            [price] => 46
            [total] => 92
        )

)
4

1 に答える 1

2

このようなものが動作するはずです

$sum = array();
$input = array(); // Your array
array_walk( $input, function( $el) use( &$sum) {
    if( !isset( $sum[ $el['id'] ] ))
        $sum[ $el['id'] ] = 0;
    $sum[ $el['id'] ] += $el['qty'];
});

これは、正しい出力を示すデモです。

array(2) { [35]=> int(1) [34]=> int(4) } 

次のような方法で更新された出力を取得できます。

$output = array();
$input = array(); // Your array
array_walk( $input, function( $el) use( &$output) {
    if( !isset( $output[ $el['id'] ] ))
        $output[ $el['id'] ] = array( 
            'id' => $el['id'], 
            'item' => $el['item'], 
            'qty' => 0, 
            'price' => 0, 
            'total' => 0
        );

    $output[ $el['id'] ]['qty'] += $el['qty'];
    $output[ $el['id'] ]['price'] += $el['price'];
    $output[ $el['id'] ]['total'] += $el['total'];
});
var_dump( $output);
于 2012-06-22T17:23:00.257 に答える