简体   繁体   English

根据某些键合并数组

[英]Combine Arrays based on certain keys

I am processing a csv and need to combine an array if two of the three keys match. 我正在处理一个csv,如果三个键中的两个匹配,则需要合并一个数组。 For instance, take the following example: 例如,使用以下示例:

<?php

$data = [
    [
        'id' => 1,
        'player' => 'John',
        'sport' => 'Football'
    ],
    [
        'id' => 2,
        'player' => 'John',
        'sport' => 'Football'
    ],
    [
        'id' => 3,
        'player' => 'Mike',
        'sport' => 'Soccer'
    ]
];

Below is the desired result. 以下是期望的结果。

$wanted = [
    [
        'id' => [1,2],
        'player' => 'John',
        'sport' => 'Football',
    ],
    [
        'id' => [3],
        'player' => 'Mike',
        'sport' => 'Soccer',
    ],
];

What would be the optimal way to achieve this? 实现这一目标的最佳方法是什么?

check this out 看一下这个

<?php

$data = [
    [
        'id' => 1,
        'player' => 'John',
        'sport' => 'Football'
    ],
    [
        'id' => 2,
        'player' => 'John',
        'sport' => 'Football'
    ],
    [
        'id' => 3,
        'player' => 'Mike',
        'sport' => 'Soccer'
    ]
];

function combine($input){
    $output = [];
    foreach($input as $subarray){
        $output[$subarray['player']]['id'][] = $subarray['id'];
        $output[$subarray['player']]['player'] = $subarray['player'];
        $output[$subarray['player']]['sport'] = $subarray['sport'];
    }
    return array_values($output);
}

print_r(combine($data));

output 产量

Array
(
    [0] => Array
        (
            [id] => Array
                (
                    [0] => 1
                    [1] => 2
                )

            [player] => John
            [sport] => Football
        )

    [1] => Array
        (
            [id] => Array
                (
                    [0] => 3
                )

            [player] => Mike
            [sport] => Soccer
        )

)

check this out 看一下这个

<?php

$data = [
    [
        'id' => 1,
        'player' => 'John',
        'sport' => 'Football'
    ],
    [
        'id' => 2,
        'player' => 'John',
        'sport' => 'Football'
    ],
    [
        'id' => 3,
        'player' => 'John',
        'sport' => 'soccer'
    ],
    [
        'id' => 4,
        'player' => 'John',
        'sport' => 'soccer'
    ],
    [
        'id' => 5,
        'player' => 'Mike',
        'sport' => 'Soccer'
    ]
];

function combine($input){
    $output = [];
    foreach($input as $subarray){
        $output[$subarray['player'].$subarray['sport']]['id'][] = $subarray['id'];
        $output[$subarray['player'].$subarray['sport']]['player'] = $subarray['player'];
        $output[$subarray['player'].$subarray['sport']]['sport'] = $subarray['sport'];
    }
    return array_filter(array_values($output));
}

print_r(combine($data));

output 产量

Array
(
    [0] => Array
        (
            [id] => Array
                (
                    [0] => 1
                    [1] => 2
                )

            [player] => John
            [sport] => Football
        )

    [1] => Array
        (
            [id] => Array
                (
                    [0] => 3
                    [1] => 4
                )

            [player] => John
            [sport] => soccer
        )

    [2] => Array
        (
            [id] => Array
                (
                    [0] => 5
                )

            [player] => Mike
            [sport] => Soccer
        )

)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM