如果有人已經這樣做了,那么想法是將不同的陣列合并為一個,并且只合并相同鍵的值sum。price, qty
在我的示例中,我只放置了兩個要合并的陣列,$arr1, $arr2但想法是動態地進行合并,因為我沒有定義數量的陣列,我可以有 2 個,也可以有 15 個。
例子:
<?php
$arr1 = [
51 => [
'name' => 'p1',
'price' => '20',
'qty' => '10',
'category' => 'c1'
],
3 => [
'name' => 'p2',
'price' => '10.50',
'qty' => '3',
'category' => 'c2'
]
];
$arr2 = [
3 => [
'name' => 'p3',
'price' => '23',
'qty' => '22',
'category' => 'c1'
],
102 => [
'name' => 'p4',
'price' => '10.50',
'qty' => '8',
'category' => 'c2'
]
];
代碼 :
mergeArrays(($arr1 $arr2));
function mergeArrays($array)
{
$mergedArray = [];
foreach ($array as $k => $arr) {
foreach ($arr as $key => $value) {
if (!isset($mergedArray[$key])) {
$mergedArray[$k][$key] = $value;
} else {
$mergedArray[$key] = $value;
}
}
}
print_r($mergedArray);
//return $mergedArray;
}
結果:
Array
(
[51] => Array
(
[name] => p1
[price] => 20
[qty] => 10
[category] => c1
)
[3] => Array
(
[name] => p2
[price] => 10.50
[qty] => 3
[category] => c2
)
[102] => Array
(
[name] => p4
[price] => 10.50
[qty] => 8
[category] => c2
)
)
預期結果:
Array
(
[51] => Array
(
[name] => p1
[price] => 20
[qty] => 10
[category] => c1
)
[3] => Array
(
[name] => p3 // the last erray value
[price] => 33.50 //sum
[qty] => 25 //sum
[category] => c1 // the last erray value
)
[102] => Array
(
[name] => p4
[price] => 10.50
[qty] => 8
[category] => c2
)
)
uj5u.com熱心網友回復:
使用...$in表示可以將任意數量的陣列傳遞給函式,然后幾個回圈將為您完成這項作業
$arr1 = [ 51 => [ 'name' => 'p1', 'price' => '20', 'qty' => '10', 'category' => 'c1' ],
3 => [ 'name' => 'p2', 'price' => '10.50', 'qty' => '3', 'category' => 'c2' ]
];
$arr2 = [ 3 => [ 'name' => 'p3', 'price' => '23', 'qty' => '22', 'category' => 'c1' ],
102 => [ 'name' => 'p4', 'price' => '10.50', 'qty' => '8', 'category' => 'c2' ]
];
function myMerge(Array ...$in)
{
$new = $in[0];
for($i=1; $i<count($in); $i ){
foreach($in[$i] as $idx => &$a) {
if( isset($new[$idx]) ){
$new[$idx]['qty'] = $a['qty'];
$new[$idx]['price'] = $a['price'];
} else {
$new[$idx] = $a;
}
}
}
return $new;
}
print_r( myMerge($arr1, $arr2) );
結果
Array
(
[51] => Array
(
[name] => p1
[price] => 20
[qty] => 10
[category] => c1
)
[3] => Array
(
[name] => p2
[price] => 33.5
[qty] => 25
[category] => c2
)
[102] => Array
(
[name] => p4
[price] => 10.50
[qty] => 8
[category] => c2
)
)
uj5u.com熱心網友回復:
希望這可以幫助
<?php
$arr1 = [
51 => [
'name' => 'p1',
'price' => '20',
'qty' => '10',
'category' => 'c1'
],
3 => [
'name' => 'p2',
'price' => '10.50',
'qty' => '3',
'category' => 'c2'
]
];
$arr2 = [
3 => [
'name' => 'p3',
'price' => '23',
'qty' => '22',
'category' => 'c1'
],
102 => [
'name' => 'p4',
'price' => '10.50',
'qty' => '8',
'category' => 'c2'
]
];
$result = [];
foreach([$arr1, $arr2] as $arr) {
$keysFromCurrentArray = array_keys($arr);
foreach ($keysFromCurrentArray as $key) {
if(array_key_exists($key, $result)) {
$result[$key] = [
$result[$key]['name'] = $arr[$key]['name'],
$result[$key]['price'] = $arr[$key]['price'],
$result[$key]['qty'] = $arr[$key]['qty'],
$result[$key]['category'] = $arr[$key]['category'],
];
} else {
$result[$key] = $arr[$key];
}
}
}
var_export($result);
輸出 :
array (
51 =>
array (
'name' => 'p1',
'price' => '20',
'qty' => '10',
'category' => 'c1',
),
3 =>
array (
0 => 'p3',
1 => 33.5,
2 => 25,
3 => 'c1',
),
102 =>
array (
'name' => 'p4',
'price' => '10.50',
'qty' => '8',
'category' => 'c2',
),
)
uj5u.com熱心網友回復:
在回圈中使用陣列合并不是最佳的
您可以像這樣將陣列放在一起:
$arrays = [ [1, 2], [2, 3], [5,8] ];
接著:
$merged = array_merge([], ...$arrays);
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/505794.html
