5

私は配列を持っています:

Array 
(
[0] => Array
    (
        [setid] => 2
        [income] => 100
    )

[1] => Array
    (
        [setid] => 2
        [income] => 120
    )

[2] => Array
    (
        [setid] => 3
        [income] => 700
    )
)

同じ setid を持つエントリを見つけて、それらの収入を合計し、重複するエントリを削除する必要があります。最終的には次のようになります。

Array
(
[0] => Array
    (
        [setid] => 2
        [income] => 220
    )

[1] => Array
    (
        [setid] => 3
        [income] => 700
    )
)

誰かが私の問題の洗練された解決策を知っていますか、それとも長い道のりを歩んですべてのステップを手動で行う必要がありますか?

感謝と挨拶

4

4 に答える 4

4

setid をキーとして使用して高速にアドレス指定できる新しい配列を作成するだけです。最後に配列のインデックスを再作成します。

$result = array();
foreach ($array as $val) {
    if (!isset($result[$val['setid']]))
        $result[$val['setid']] = $val;
    else
        $result[$val['setid']]['income'] += $val['income'];
}
$result = array_values($result); // reindex array
于 2013-10-10T14:55:51.180 に答える
1

これはうまくいくはずです:

$values = array();
foreach($array as $val) {
    if(isset($values[$val['setid']])) {
        $values[$val['setid']] += $val['income'];
    } else {
        $values[$val['setid']] = $val['income'];
    }
}
//all values are now in $values array, keys are setid and values are income
于 2013-10-10T14:56:57.223 に答える
0

独自の関数を作成します。長い道のりではありません。

$result = array_reduce($originalArray, function($memo, $item){

  isset($memo[$item['setid']])
    ? $memo[$item['setid']] = $item['income']
    : $memo[$item['setid']] += $item['income'];
  return $memo;

}, []);
于 2013-10-10T14:57:10.463 に答える
-1

PHPの公式サイトで提供されているarray_unique関数を使用する必要があります。

例:

<?php
$input = array("a" => "green", "red", "b" => "green", "blue", "red");
$result = array_unique($input);
print_r($result);
?>

出力:

Array
(
    [a] => green
    [0] => red
    [1] => blue
)

重複した値を合計するには、array_count_values関数を使用できます。

<?php
$array = array(1, "hello", 1, "world", "hello");
print_r(array_count_values($array));
?>

出力は次のようになります。

Array
(
    [1] => 2
    [hello] => 2
    [world] => 1
)
于 2013-10-10T14:59:00.977 に答える