首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从原数组中安排期望的新数组

如何从原数组中安排期望的新数组
EN

Stack Overflow用户
提问于 2019-06-04 09:48:47
回答 3查看 60关注 0票数 0

当三个键(USERID、DATE、ITEM DETAIL)的值在数组的另一个索引中相同时,我们需要添加数量的值,请参见下面的预期数组。

原始数组如下:

代码语言:javascript
复制
Array
(
    [0] => Array
        (
            [USERID] => 63120
            [DATE] => '2018-01-08'
            [ITEM DETAIL] => 'Claims Investigation Hours'
            [QUANTITY] => 3.00
        )

    [1] => Array
        (
            [USERID] => 63120
            [DATE] => '2018-01-09'
            [ITEM DETAIL] => 'Claims Investigation Hours'
            [QUANTITY] => 4.90
        )

    [2] => Array
        (
            [USERID] => 63120
            [DATE] => '2018-01-09'
            [ITEM DETAIL] => 'Claims Investigation Hours'
            [QUANTITY] => 1.20
        )

    [3] => Array
        (
            [USERID] => 63120
            [DATE] => '2018-01-09'
            [ITEM DETAIL] => 'Claims Investigation Travel Hours'
            [QUANTITY] => 4.40
        )

    [4] => Array
        (
            [USERID] => 63120
            [DATE] => '2018-01-09'
            [ITEM DETAIL] => 'Claims Investigation Travel Hours'
            [QUANTITY] => 3.20
        )
)

这里:索引2和索引3中的三个键(用户in、日期、项详细信息)的值是相同的,因此数量键之和值为:4.90+1.20

同样,索引3和索引4中的三个键(USERID、DATE、ITEM DETAIL)是相同的,因此数量键之和值为( 4.40 + 3.20 )。

我想以这种方式创建一个预期的数组。拜托,有人能帮我吗?预期数组如下所示:

代码语言:javascript
复制
Array
(
    [0] => Array
        (
            [USERID] => 63120
            [DATE] => '2018-01-08'
            [ITEM DETAIL] => 'Claims Investigation Hours'
            [QUANTITY] => 3.00
        )

    [1] => Array
        (
            [USERID] => 63120
            [DATE] => '2018-01-09'
            [ITEM DETAIL] => 'Claims Investigation Hours'
            [QUANTITY] => 5.10
        )

    [2] => Array
        (
            [USERID] => 63120
            [DATE] => '2018-01-09'
            [ITEM DETAIL] => 'Claims Investigation Travel Hours'
            [QUANTITY] => 7.60
        )
)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-06-04 10:21:15

这也可以通过数组缩减来实现。

代码语言:javascript
复制
$array = array_values(array_reduce($array, function($a, $b) {
    $key = implode("|", [$b['USERID'], $b['DATE'], $b['ITEM DETAIL']]);
    if(array_key_exists($key, $a)) {
        $a[$key]['QUANTITY']+= $b['QUANTITY'];
    } else {
        $a[$key] = $b;
    }

    return $a;
}, []));
票数 1
EN

Stack Overflow用户

发布于 2019-06-04 10:07:29

这应该能行。

代码语言:javascript
复制
$final = [];

foreach ($arr as $a) {
    // generating a unique key based on the required conditions
    $key = $a['USER_ID'] . $a['DATE'] . $a['ITEM DETAIL'];
    // if not set for unique record then set the first record
    if (!isset($final[$key])) {
        $final[$key] = $a;
    } else {
        // increment the quantity for repeats 
        $final[$key]['QUANTITY'] += $a['QUANTITY'];
    }
}

$final = array_values($final);

print_r($final);

输出

代码语言:javascript
复制
Array
(
    [0] => Array
        (
            [USERID] => 63120
            [DATE] => 2018-01-08
            [ITEM DETAIL] => Claims Investigation Hours
            [QUANTITY] => 3
        )

    [1] => Array
        (
            [USERID] => 63120
            [DATE] => 2018-01-09
            [ITEM DETAIL] => Claims Investigation Hours
            [QUANTITY] => 6.1
        )

    [2] => Array
        (
            [USERID] => 63120
            [DATE] => 2018-01-09
            [ITEM DETAIL] => Claims Investigation Travel Hours
            [QUANTITY] => 7.6
        )

)
票数 2
EN

Stack Overflow用户

发布于 2019-06-04 09:54:19

这是片段,请参阅内联文档以获得解释。

代码语言:javascript
复制
$result = [];
$i = 0;
array_multisort(array_column($arr,'USERID'), SORT_ASC, 
array_column($arr,'DATE'), SORT_ASC,array_column($arr,
'ITEM DETAIL'),SORT_ASC, $data);

foreach ($arr as $key => $value) {
    if (!empty($arr[$key + 1])) { // checking for last if not empty
        // checking your condition
        if ($arr[$key]['USERID'] == $arr[$key + 1]['USERID'] &&
            $arr[$key]['DATE'] == $arr[$key + 1]['DATE'] &&
            $arr[$key]['ITEM DETAIL'] == $arr[$key + 1]['ITEM DETAIL']) 
        {
            // assigning current value to result
            $result[$i] = $value;
            // add next value to current
            $result[$i]['QUANTITY'] += $arr[$key + 1]['QUANTITY'];
            $i++;
        }
    }
}
print_r($result);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56441447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档