PHP - 按键合并二维数组 [英] PHP - merging 2D array by keys

查看:64
本文介绍了PHP - 按键合并二维数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何将这些数组合并在一起?

How can I merge these array together?

 Array
    (
        [0] => Array
            (
                [type] => Person
                [relevance] => 0.700000
                [count] => 300
                [text] => Chris
            )
    )
  Array
    (
        [0] => Array
            (
                [type] => Person
                [relevance] => 0.900000
                [count] => 400
                [text] => Chris
            )

        [1] => Array
            (
                [type] => Person
                [relevance] => 0.500000
                [count] => 200
                [text] => Tom
            )
    )

或这样的数组:

Array
        (
            [0] => Array
                (
                    [type] => Person
                    [relevance] => 0.700000
                    [count] => 300
                    [text] => Chris
                )


            [1] => Array
                (
                    [type] => Person
                    [relevance] => 0.900000
                    [count] => 400
                    [text] => Chris
                )

            [2] => Array
                (
                    [type] => Person
                    [relevance] => 0.500000
                    [count] => 200
                    [text] => Tom
                )
        )

预期结果是:

Array
(
    [0] => Array
        (
            [type] => Person
            [relevance] => 0.800000
            [count] => 700
            [text] => Chris
        )



    [1] => Array
        (
            [type] => Person
            [relevance] => 0.500000
            [count] => 200
            [text] => Tom
        )
)

[relevance] 值是一个平均值

[relevance] value is an average number

[count] 值是一个递增的数字

[count] value is an incremental number

这些数组的合并应该基于 [text] 值.我怎样才能用 php 快速地做到这一点?

The merging of these array should base on [text] value. How can I do this with php in a fast way?

感谢您的帮助.

推荐答案

如果这是数组

$array = Array(
    Array(
        'type' => 'Person',
        'relevance' => .7,
        'count' => 300,
        'text' => 'Chris'
    ),
    Array(
        'type' => 'Person',
        'relevance' => .9,
        'count' => 400,
        'text' => 'Chris'
    ),
    Array(
        'type' => 'Person',
        'relevance' => .5,
        'count' => 200,
        'text' => 'Tom'
    ),
);

然后:

$tmp = Array();

foreach($array as $obj) {
    if(!isset($tmp[$obj['text']])) {
        $tmp[$obj['text']] = array_merge(Array('total_count'=>1),$obj);
        continue;
    }
    $tmp[$obj['text']]['count']     += $obj['count'];
    $tmp[$obj['text']]['relevance'] += $obj['relevance'];
    $tmp[$obj['text']]['total_count']++; // useful for average calculation
}

$result = Array();

foreach($tmp as $key=>$obj) {
    $obj['relevance'] = $obj['relevance']/$obj['total_count'];
    unset($obj['total_count']); // useless now
    $result[] = $obj;
}

print_r($result);

这篇关于PHP - 按键合并二维数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆