根据第一个数组中的值在第二个数组中添加值

时间:2015-01-19 10:52:43

标签: php arrays

情况如下:

假设我有第一个数组:

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)
);

3 个答案:

答案 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

更好的做法是在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)

Here's an example