簡體   English   中英

在特定數組值上合並數組

[英]combine array on specific array value

使用數組:

Array
(
    [0] => Array
        (
            [description] => EXAMI
            [pcchrgamt] => 190.00
            [pchrgqty] => 1.00
            [pchrgup] => 190.00
        )

    [1] => Array
        (
            [description] => EXAMI
            [pcchrgamt] => 40.00
            [pchrgqty] => 1.00
            [pchrgup] => 40.00
        )

)

我得到:

Array
(
    [description] => 0
    [pcchrgamt] => 230
    [pchrgqty] => 2
    [pchrgup] => 230
)

使用:

print_r( $rows1 );
 $sumArray = array();
 foreach ($rows1 as $k=>$subArray) {

 foreach ($subArray as $id=>$value) {
 $sumArray[$id]+=$value;
}
}

print_r($sumArray);

我想要得到的是:

Array
(
    [0] => Array
        (
            [description] => EXAMI
            [pcchrgamt] => 230
            [pchrgqty] => 2
            [pchrgup] => 230
        )



)

意思是我只想合並數字量。

我也不知道如何處理:

Array
(
    [0] => Array
        (
            [description] => EXAMI
            [pcchrgamt] => 190.00
            [pchrgqty] => 1.00
            [pchrgup] => 190.00
        )

    [1] => Array
        (
            [description] => EXAMI
            [pcchrgamt] => 40.00
            [pchrgqty] => 1.00
            [pchrgup] => 40.00
        )


    [2] => Array
        (
            [description] => EXAMI1
            [pcchrgamt] => 190.00
            [pchrgqty] => 1.00
            [pchrgup] => 190.00
        )

    [3] => Array
        (
            [description] => EXAMI1
            [pcchrgamt] => 40.00
            [pchrgqty] => 1.00
            [pchrgup] => 40.00
        )
)

我想根據描述進行組合,並且從上面獲得:

Array
    (
        [0] => Array
            (
                [description] => EXAMI
                [pcchrgamt] => 230
                [pchrgqty] => 2
                [pchrgup] => 230
            )
         [1] => Array
            (
                [description] => EXAMI1
                [pcchrgamt] => 230
                [pchrgqty] => 2
                [pchrgup] => 230
            )



    )

描述可能很多,可能很多,並且可能同時存在一個唯一性。

如何進行這些

這是一個相當幼稚的方法:

<?php
$records = [
    [
        'desc' => 'EXAMI',
        'amt' => 190.00,
        'qty' => 1,
        'up' => 190.00,
    ],
    [
        'desc' => 'EXAMI',
        'amt' => 40.00,
        'qty' => 1,
        'up' => 40.00,
    ],
    [
        'desc' => 'EXAMI1',
        'amt' => 190.00,
        'qty' => 1,
        'up' => 190.00,
    ],
    [
        'desc' => 'EXAMI1',
        'amt' => 40.00,
        'qty' => 1,
        'up' => 40.00,
    ],
];

function combineArrayOnKey(array $array, $key) {
    $new_array = [];

    foreach($array as $k => $v) {
        if(!is_array($v) || !isset($v[$key]))
            continue;

        // Create elements for new keys
        if(!isset($new_array[$v[$key]])) {
            $new_array[$v[$key]] = $v;
            continue;
        }

        $parent =& $new_array[$v[$key]];

        foreach($v as $kk => $vv) {
            if(!is_numeric($vv))
                continue;

            $parent[$kk] = floatval(@$parent[$kk]) + $vv;
        }
    }

    return array_values($new_array);
}

print_r(combineArrayOnKey($records, 'desc'));

該函數遍歷記錄並為每個不同的desc鍵創建一個條目。 當遇到帶有重復desc的記錄時,它將遍歷其數字字段並將它們與先前的條目相加。

它給出了您的示例的輸出:

Array
(
    [0] => Array
        (
            [desc] => EXAMI
            [amt] => 230
            [qty] => 2
            [up] => 230
        )

    [1] => Array
        (
            [desc] => EXAMI1
            [amt] => 230
            [qty] => 2
            [up] => 230
        )

)

嘗試這個 :

$sumArray = array();

 foreach ($rows1 as $k=>$subArray) {

     foreach ($subArray as $key=> $value) {
    if(is_numeric($value)){
                $sumArray[$subArray['description']][$key]+=$value;
         }
         else{
               $sumArray[$subArray['description']][$key]=$value;
         }
     }

}

var_dump($sumArray);

您可以將desc用作結果的鍵,也可以將結果上的array_values用作數字作為鍵,您可以在此處查看實時演示

$result = [];
foreach($records as $v) {
  $result[$v['desc']]['desc']  = $v['desc'];
  $result[$v['desc']]['amt']  += $v['amt']; 
  $result[$v['desc']]['qty']  += $v['qty']; 
  $result[$v['desc']]['up']   += $v['up']; 
}
print_r($result);

您可以嘗試使用此代碼而不是您的代碼嗎

    print_r( $rows1 );
     $sumArray = array();
     foreach ($rows1 as $k=>$subArray) {
        $sumArray[$subArray['description']['description'] = $subArray['description']
        $sumArray[$subArray['description']['amt'] += $subArray['amt']
        $sumArray[$subArray['description']['qty'] += $subArray['qty']
        $sumArray[$subArray['description']['up'] += $subArray['up']

    }

    print_r([$sumArray1, $sumArray2]);

和萊姆知道是否有任何問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM