合并具有相同值的数组,并将另一个数组显示为值


Merge array with same value and display the other array as value

我是PHP新手,在我的项目中发现了这个问题。我有这个阵列:

Array
(
 [0] => Array
    (
        [count] => 1
        [account] => 14
        [amt] => 1000
    )
[1] => Array
    (
        [count] => 1
        [account] => 11
        [amt] => 124
    )
[2] => Array
    (
        [count] => 1
        [account] => 12
        [amt] => 2345
    )
[3] => Array
    (
        [count] => 1
        [account] => 14
        [amt] => 2345
    )
)

我想把它转换成这种格式的

Array
(
[14] => Array
    (
        [0] => Array
            (
                [amt] => 1000
                [count] => 1
                [volume] => 1000
            )
        [1] => Array
            (
                [amt] => 124
                [count] => 0
                [volume] => 0
            )
        [2] => Array
            (
                [amt] => 2345
                [count] => 1
                [volume] => 2345
            )
    )
[11] => Array
    (
        [0] => Array
            (
                [amt] => 1000
                [count] => 0
                [volume] => 0
            )
        [1] => Array
            (
                [amt] => 124
                [count] => 1
                [volume] => 124
            )
        [2] => Array
            (
                [amt] => 2345
                [count] => 0
                [volume] => 0
            )
    )
[12] => Array
    (
        [0] => Array
            (
                [amt] => 1000
                [count] => 0
                [volume] => 0
            )
        [1] => Array
            (
                [amt] => 124
                [count] => 0
                [volume] => 0
            )
        [2] => Array
            (
                [amt] => 2345
                [count] => 1
                [volume] => 2345
            )
    )
 )

正如您可能注意到的,account键将成为新数组的键,并且值内的数组将所有数组都放在第一个数组上。请帮忙。它就像一个硬核阵列,我的项目真的需要它。谢谢

试试这个:

$newArray = array();
foreach ($origArray as $val)
{
   $val['volume'] = $val['count'] * $val['amt'];
   $account = $val['account'];
   unset($val['account']);  
   $newArray[$account][]=$val;
}

编辑

好吧,我想这可能接近你想要的,尽管我不明白为什么每个账户都有3个结果,而一开始只有4个。

$newArray = array();
$accounts = array();
foreach ($origArray as $val) {
    $accounts[$val['account']] = $val['account'];
}
foreach ($accounts as $account) {
    foreach ($origArray as $val) {
        $val['count'] = $account == $val['account'] ? $val['count'] : 0;
        $val['volume'] = $val['count'] * $val['amt'];
        unset($val['account']);
        $newArray[$account][] = $val;
    }
}
<?php
$final_array = array();
$dataset = YOUR FIRST ARRAY;
foreach($dataset as $data)
{
    $account = $data['account'];
    unset($data['account'])
    $final_array[$account][] = $data;
}

这应该能满足你的需要。尽管我不知道第二个数组中的卷来自哪里