首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP -按键合并二维数组

PHP -按键合并二维数组
EN

Stack Overflow用户
提问于 2013-07-18 16:02:20
回答 3查看 938关注 0票数 0

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

代码语言:javascript
复制
 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
            )
    )

或者像这样的数组:

代码语言:javascript
复制
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
                )
        )

预期的结果是:

代码语言:javascript
复制
Array
(
    [0] => Array
        (
            [type] => Person
            [relevance] => 0.800000
            [count] => 700
            [text] => Chris
        )



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

相关值是一个平均值

计数值是递增的数字

这些数组的合并应该基于文本值。我怎么才能用php快速做到这一点呢?

谢谢你的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-18 16:24:35

如果这是数组

代码语言:javascript
复制
$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'
    ),
);

然后:

代码语言:javascript
复制
$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);
票数 2
EN

Stack Overflow用户

发布于 2013-07-18 16:20:22

可能是这样的

代码语言:javascript
复制
$newArray = array();

foreach ($oldArray as $item) {
    if (!array_key_exists($item['text'], $newArray)) {
        $newArray[$item['text']] = $item;
        $newArray[$item['relevance_values']] = array();

    } else {
        $newArray[$item['text']]['count'] += $item['count'];
        $newArray[$item['relevance_values']][] = $item['relevance'];
    }
}

foreach ($newArray as $item) {
    $relevance = 0;
    foreach ($item['relevance_values'] as $value) {
       $relevance += $value;
    }
    $item['relevance'] = $relevance / count($item['relevance_values']);
}
票数 2
EN

Stack Overflow用户

发布于 2013-07-18 16:22:15

试试这个:

代码语言:javascript
复制
function mergeOnText($array){
    $results = array();
    foreach($array as $person){
        $found = -1;
        foreach($results as $i => $res)
            if($res['text'] == $person['text']){
                $found = $i;
                break;
            }
        if($found > -1){
            $results[$found]['relevance'][] = $person['relevance'];
            $results[$found]['count'] += $person['count'];
        } else {
            $results[] = $person;
        }
    }
    foreach($results as $i => $res)
        $results[$i]['relevance'] = array_sum($res['relevance']) / count($res['relevance']);
    return $results;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17717900

复制
相关文章

相似问题

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