寻找从数组中提取值的方法,将它们添加并推送到新数组

时间:2017-02-12 06:06:45

标签: php arrays

我已经在这方面工作了一段时间,似乎无法找到解决方案。

我开始使用这样的数组:

[
    [
        'username' => 'test',
        'amount' => 1.05
    ],
    [
        'username' => 'test',
        'amount' => 2.05
    ],
    [
        'username' => 'test',
        'amount' => 3.05
    ],
    [
        'username' => 'demo',
        'amount' => 4.10
    ],
    [
        'username' => 'demo',
        'amount' => 4.10
    ],
    [
        'username' => 'demo',
        'amount' => 2.10
    ]
]

我最终希望得到一个像这样的数组:

[
    [
        'username' => 'test',
        'total' => 6.15
    ],
    [
        'username' => 'demo',
        'total' => 10.30
    ]
]

正如您所看到的,我正在尝试为每个用户提取金额值,添加它们并推送到一个新的数组,其中包含用户名和总金额。

关于如何实现这一目标的任何想法?

1 个答案:

答案 0 :(得分:0)

因此,您可以简单地遍历数组的每个元素,并使用Array['username']['total']形式填充多维关联数组。

function sumByUsername($array)
{
    foreach ($array as $item) {
        $output[$item['username']]['total'] += $item['amount'];
    }

    return $output;
}

所以使用你的测试数据:

$output = sumByUsername($input);
var_dump($output);

你得到的数组如下:

//    array(2) {
//        ["test"]=>
//      array(1) {
//            ["total"]=>
//        float(6.15)
//      }
//      ["demo"]=>
//      array(1) {
//            ["total"]=>
//        float(10.3)
//      }
//    }

要获得您指定的确切输出,请将以下行添加到循环中:

function sumByUsername($array)
{
    foreach ($array as $item) {
        $output[$item['username']]['username'] = $item['username']; // <-----
        $output[$item['username']]['total'] += $item['amount'];
    }
}

//    array(2) {
//      ["test"]=>
//      array(2) {
//            ["username"]=>
//        string(4) "test"
//            ["total"]=>
//        float(6.15)
//      }
//      ["demo"]=>
//      array(2) {
//            ["username"]=>
//        string(4) "demo"
//            ["total"]=>
//        float(10.3)
//      }
//    }