[英]Merging two arrays with weight of index in both
我有兩個這樣的數組,想要合並
進行第一索引數組1檢查
取數組2的第一個索引並檢查
取數組1的第二個索引並檢查
取數組2的第一個索引並檢查
請注意,以上邏輯僅供參考
例如
Array 1
(
[144] => Array
(
[weight] => 2
)
[145] => Array
(
[weight] => 1
)
[177] => Array
(
[weight] => 1
)
)
Array 2
(
[93] => Array
(
[weight] => 4
)
[133] => Array
(
[weight] => 4
)
[144] => Array
(
[weight] => 4
)
[145] => Array
(
[weight] => 4
)
[141] => Array
(
[weight] => 1
)
)
我想要結果
Array 3
(
[144] => Array
(
[weight] => 6
)
[145] => Array
(
[weight] => 5
)
[93] => Array
(
[weight] => 4
)
[133] => Array
(
[weight] => 4
)
[177] => Array
(
[weight] => 1
)
[141] => Array
(
[weight] => 1
)
)
提前致謝
$out = array();
foreach ($arr1 as $key => $val) {
if (isset($out[$key]['weight'])) {
$out[$key]['weight'] += $val['weight'];
} else {
$out[$key]['weight'] = $val['weight'];
}
}
foreach ($arr2 as $key => $val) {
if (isset($out[$key]['weight'])) {
$out[$key]['weight'] += $val['weight'];
} else {
$out[$key]['weight'] = $val['weight'];
}
}
print_r($out);
另外,如果您要使用的數組數量未知,則可以執行以下操作:
$arrays = array (
$arr1,
$arr2,
$arr3
// ...
};
$out = array();
foreach ($arrays as $array) {
foreach ($array as $key => $val) {
if (isset($out[$key]['weight'])) {
$out[$key]['weight'] += $val['weight'];
} else {
$out[$key]['weight'] = $val['weight'];
}
}
}
print_r($out);
您似乎首先要第二個數組,
然后追加第一個數組
也許這是可行的
$a = ...; //first array
$b = ...; // second array
var_export($a);
var_export($b);
$rtn = $tmp = array();
foreach ($b as $idx=>$arr)
{
if (isset($a[$idx]))
{
$rtn[$idx]['weight'] = $arr['weight'] + $a[$idx]['weight'];
unset($a[$idx]);
}
else
{
$tmp[$idx]['weight'] = $arr['weight'];
}
}
$res = $rtn+$tmp+$a;
print_r($res);
結果
array ( 144 => array ( 'weight' => 2, ), 145 => array ( 'weight' => 1, ), 177 => array ( 'weight' => 1, ), )array ( 93 => array ( 'weight' => 4, ), 133 => array ( 'weight' => 4, ), 144 => array ( 'weight' => 4, ), 145 => array ( 'weight' => 4, ), 141 => array ( 'weight' => 1, ), )Array ( [144] => Array ( [weight] => 6 ) [145] => Array ( [weight] => 5 ) [93] => Array ( [weight] => 4 ) [133] => Array ( [weight] => 4 ) [141] => Array ( [weight] => 1 ) [177] => Array ( [weight] => 1 ) )
這是非常簡單的任務:
array_walk($a, function(&$value, $key, $b){
$value["weight"] += isset($b[$key]["weight"])?$b[$key]["weight"]:0;
}, $b);
$ret = $a+$b
給定輸入:
$a = array(
1 => array(
"weight" => 1
),
2 => array(
"weight" => 5
)
);
$b = array(
1 => array(
"weight" => 2
),
3 => array(
"weight" => 4
)
);
會產生:
array(3) {
[1]=>
array(1) {
["weight"]=>
int(3)
}
[2]=>
array(1) {
["weight"]=>
int(5)
}
[3]=>
array(1) {
["weight"]=>
int(4)
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.