簡體   English   中英

將數組成員上移一級和匹配鍵的SUM值

[英]Shift Array Members Up One Level and SUM Values of Matching Keys

我有以下數據數組:

array (size=3)
  123 => 
    array (size=1)
      1 => string '50000.00' (length=8)
  126 => 
    array (size=1)
      3 => string '20000.00' (length=8)
  86 => 
    array (size=1)
      3 => string '6000.00' (length=7)

Im並嘗試將每個子數組上移一個級別,如果鍵匹配,則將總數求和。 例如,結果應如下所示:

array (size=2)
  1 => string '50000.00' (length=8)
  3 => string '26000.00' (length=8)

我努力了:

foreach ($weight_arr as $value)
 {
   $new_arr += $value;
 }

但最終:

array (size=2)
  1 => string '50000.00' (length=8)
  3 => string '20000.00' (length=8)

我嘗試過其他一些解決方案,但都失敗了。 我一定想念一些東西,這似乎很簡單。

編輯:

原始數據:

array (size=7)
  0 => 
    array (size=15)
      'id' => int 17
      'wo_id' => int 12
      'prod_id' => int 123
      'qty' => int 3
      'cat_id' => int 12
      'blend' => null
      'length' => null
      'lbs' => string '50000.00' (length=8)
      'delay' => null
      'unit' => null
      'created_at' => string '2015-06-12 14:15:10' (length=19)
      'updated_at' => string '2015-06-12 14:15:10' (length=19)
      'deleted_at' => null
      'product_id' => int 123
      'truck_types_id' => int 2
  1 => 
    array (size=15)
      'id' => int 18
      'wo_id' => int 12
      'prod_id' => int 123
      'qty' => int 3
      'cat_id' => int 12
      'blend' => null
      'length' => null
      'lbs' => string '50000.00' (length=8)
      'delay' => null
      'unit' => null
      'created_at' => string '2015-06-12 14:15:10' (length=19)
      'updated_at' => string '2015-06-12 14:15:10' (length=19)
      'deleted_at' => null
      'product_id' => int 123
      'truck_types_id' => int 1
  2 => 
    array (size=15)
      'id' => int 19
      'wo_id' => int 12
      'prod_id' => int 126
      'qty' => int 2
      'cat_id' => int 12
      'blend' => null
      'length' => null
      'lbs' => string '20000.00' (length=8)
      'delay' => null
      'unit' => null
      'created_at' => string '2015-06-14 23:28:25' (length=19)
      'updated_at' => string '2015-06-14 23:28:25' (length=19)
      'deleted_at' => null
      'product_id' => int 126
      'truck_types_id' => int 2
  3 => 
    array (size=15)
      'id' => int 20
      'wo_id' => int 12
      'prod_id' => int 126
      'qty' => int 2
      'cat_id' => int 12
      'blend' => null
      'length' => null
      'lbs' => string '20000.00' (length=8)
      'delay' => null
      'unit' => null
      'created_at' => string '2015-06-14 23:28:25' (length=19)
      'updated_at' => string '2015-06-14 23:28:25' (length=19)
      'deleted_at' => null
      'product_id' => int 126
      'truck_types_id' => int 3
  4 => 
    array (size=15)
      'id' => int 12
      'wo_id' => int 12
      'prod_id' => int 86
      'qty' => int 25
      'cat_id' => int 11
      'blend' => null
      'length' => null
      'lbs' => string '6000.00' (length=7)
      'delay' => null
      'unit' => null
      'created_at' => string '2016-01-21 00:33:59' (length=19)
      'updated_at' => string '2016-01-21 00:33:59' (length=19)
      'deleted_at' => null
      'product_id' => int 86
      'truck_types_id' => int 3
  5 => 
    array (size=15)
      'id' => null
      'wo_id' => int 12
      'prod_id' => int 88
      'qty' => int 15
      'cat_id' => int 11
      'blend' => null
      'length' => null
      'lbs' => null
      'delay' => null
      'unit' => null
      'created_at' => string '2016-01-21 00:33:59' (length=19)
      'updated_at' => string '2016-01-21 00:33:59' (length=19)
      'deleted_at' => null
      'product_id' => null
      'truck_types_id' => null
  6 => 
    array (size=15)
      'id' => null
      'wo_id' => int 12
      'prod_id' => int 90
      'qty' => int 10
      'cat_id' => int 11
      'blend' => null
      'length' => null
      'lbs' => null
      'delay' => null
      'unit' => null
      'created_at' => string '2016-01-21 00:33:59' (length=19)
      'updated_at' => string '2016-01-21 00:33:59' (length=19)
      'deleted_at' => null
      'product_id' => null
      'truck_types_id' => null

和foreach創建數組即時通訊使用:

foreach($prodArr as $prod)
 {
  if(!is_null($prod['lbs']))
    if(empty($weight_arr[$prod['truck_types_id']])) $weight_arr[$prod['prod_id']] = array($prod['truck_types_id'] => $prod['lbs'] );
 }   

由於您還沒有發布完整的代碼,因此我才從頭開始重寫它,以了解您的任務。 如果我誤解了那里的東西,請發表評論...

<?php

$a = [
    123 => [1 => '50000.00'],
    126 => [3 => '20000.00'],
    86 => [3 => '6000.00']
    ];
var_export($a); 

$na = [];

foreach ($a as $subArray) {
    foreach ($subArray as $key => $value) {
        if (array_key_exists($key, $na)) $na[$key] += $value;
        else $na[$key] = $value;
    }
}

var_export($na);

請注意,使用floatval處理浮點數而不是那里的字符串可能是一個好主意,盡管PHP可以很好地處理上述代碼,並且上述代碼不使用浮點數也可以正常工作。

$arr = [
  123 => 
    [ 1 => '50000.00' ],
  126 => 
    [ 3 => '20000.00' ],
  86 => 
    [ 3 => '6000.00'  ]
];
$decimals = '.';
$thousands = '';

$new = array();

foreach($arr as $firstlevel) {
    foreach($firstlevel as $key => $val) {

        /* Since we have strings representing floats we need to 
         * transform them into float first and transform them
         * back to their string after adding them together
         */
        if(isset($new[$key])) {
            $new[$key] = number_format( 
                floatval($new[$key]) + floatval($val), 
                2, 
                $decimals, 
                $thousands
            );

        } else {
            $new[$key] = $val;
        }
    }
}

echo '<pre>';
print_r($new);
echo '</pre>';

如果您確切需要該字符串格式,請閱讀php文檔中的有關number_format()floatval()的信息。 為了解決您的問題,您需要使用foreach循環。 第一個遍歷數組的每個元素,第二個遍歷每個子數組的每個元素。

暫無
暫無

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

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