doutang3077 2016-01-24 11:40
浏览 141
已采纳

在多维数组中查找重复值

I'm trying to code a system which will find user accounts that are using the same IPs, and print out the matches with their keys. I have already coded the part where the data is pulled from MySQL and nicely put in a multidimensional associative array, so input looks like this (the key is UserID, values are IP addresses):

$users = array(
               100 => array("1.1.1.1","2.2.2.2","3.3.3.3"),
               200 => array("1.1.1.1","4.4.4.4","5.5.5.5"),
               300 => array("1.1.1.1","4.4.4.4","7.7.7.7")
              );

The expected output would be:

Array
(
    [1.1.1.1] => Array
        (
            [0] => 100
            [1] => 200
            [2] => 300
        )

    [4.4.4.4] => Array
        (
            [0] => 200
            [1] => 300
        )
)

I have searched and used trial and error with multiple nested foreach that would loop through the arrays, tried array_intersect to find the duplicates, but nothing gets me close to the expected output. By now I think I'm overthinking the problem and the solution is really easy, but I cannot seem to get close to the expected output. Any help is appreciated, thank you.

  • 写回答

2条回答 默认 最新

  • dongxie2756 2016-01-24 12:44
    关注
    $output = array();
    // loop through each user
    foreach ($users as $id => $ips) {
        // loop through each IP address
        foreach ($ips as $ip) {
            // add IP address, if not present
            if (!isset($output[$ip])) {
                $output[$ip] = array();         
            }
            // add user ID to the IP address' array
            $output[$ip][] = $id;
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部