[英]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.