情况如下:
假设我有第一个数组:
Array(
[0] => Person1
[1] => Person1
[2] => Person2
)
第二个数组为:
Array(
[0] => 100.00
[1] => 150.25
[2] => 157.15
)
如何添加第二个数组的值(100.00
+ 150.25
)并合并它们(250.25
),使它们属于第一个数组中的Person1
。< / p>
期望的输出:
Array(
[0] => 250.25 // for Person1 in the first Array after adding
[1] => 157.15 // for Person2 in the first Array
)
非常感谢任何帮助。谢谢。
P.S。:所有值都来自数据库。
编辑1 : 这是我尝试过的,但这会输出第二个数组:
$sums = array();
$sums = array_fill_keys(array_keys($affiCode + $affiCommAmount), 0);
array_walk($sums, function (&$value, $key, $arrs) {
$value = @($arrs[0][$key] + $arrs[1][$key]);
}, array($affiCode, $affiCommAmount)
);
答案 0 :(得分:1)
数组大小相同,因此您可以使用for
循环同时处理它们:
for($i = 0; $i<count($personArray); $i++)
在循环内,构造一个新数组,键入第一个数组中的值。如果密钥尚不存在,请将其初始化:
if (!isset($newArray[$personArray[$i]])) {
$newArray[$personArray[$i]] = 0.0;
}
然后将新值添加到选定的数组键:
$newArray[$personArray[$i]] += $valueArray[$i]
当循环结束时,$newArray
将如下所示:
Array(
['Person1'] => 250.25
['Person2'] => 157.15
)
如果要用数字索引替换“Person1”和“Person2”键,请使用array_values()
:
$numericallyIndexedArray = array_values($newArray);
最终代码如下:
$newArray = [];
for($i = 0; $i<count($personArray); $i++) {
if (!isset($newArray[$personArray[$i]])) {
$newArray[$personArray[$i]] = 0;
}
$newArray[$personArray[$i]] += $valueArray[$i];
}
// Optionally return the new array with numerical indexes:
$numericallyIndexedArray = array_values($newArray);
答案 1 :(得分:0)
通过索引从第一个数组获取此人并添加资金:
for($i=0;$i<count(arrayPerson);$i++){
$arrayPerson[$i]->addMoney($arrayMoney[$i])
//Or $arrayPerson[$i]->Money += $arrayMoney[$i]
} //$i defines your index in the array.
更好的做法是在SQL中进行连接,并按PersonID对钱和组进行求和。
例如:
SELECT person.* COUNT(Money) FROM Person
LEFT JOIN Money
ON person.ID = Money.PersonID
GROUP BY person.ID
答案 2 :(得分:0)
简单foreach
循环:
$people = array('Person1', 'Person1', 'Person2');
$values = array(100.00, 150.25, 157.15);
$output = array();
foreach ($people as $key => $person) {
if (! isset($output[$person])) {
$output[$person] = 0;
}
if (! empty($values[$key])) {
$output[$person] += $values[$key];
}
}
// $output = array(2) { ["Person1"]=> float(250.25) ["Person2"]=> float(157.15) }
如果您想取消$output
中的密钥,可以使用array_values($output)