Php 在多维数组中查找重复值

Php 在多维数组中查找重复值,php,multidimensional-array,Php,Multidimensional Array,我正在尝试编写一个系统,该系统将查找使用相同IP的用户帐户,并用它们的密钥打印出匹配项。我已经对从MySQL中提取数据的部分进行了编码,并很好地将其放入多维关联数组中,因此输入如下所示(键是UserID,值是IP地址): 预期产出将是: Array ( [1.1.1.1] => Array ( [0] => 100 [1] => 200 [2] => 300 )

我正在尝试编写一个系统,该系统将查找使用相同IP的用户帐户,并用它们的密钥打印出匹配项。我已经对从MySQL中提取数据的部分进行了编码,并很好地将其放入多维关联数组中,因此输入如下所示(键是UserID,值是IP地址):

预期产出将是:

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

    [4.4.4.4] => Array
        (
            [0] => 200
            [1] => 300
        )
)
我搜索并使用了多个嵌套foreach的反复试验,这些嵌套foreach将在数组中循环,我尝试了array_intersect来查找重复项,但没有任何东西使我接近预期的输出。到目前为止,我认为我对这个问题想得太多了,解决方法非常简单,但我似乎无法接近预期的结果。非常感谢您的帮助,谢谢

$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")
                );

$allIP = [];
foreach ( $users as $user ) {
    $allIP = array_merge($allIP, $user);
}
$allIP = array_unique($allIP);

$result = [];
foreach ( $allIP as $ip ) {
    foreach ( $users as $key => $val ) {
        if ( in_array($ip, $val, true) ) {
            if ( !isset($result[$ip]) ) {
                $result[$ip] = [];
            }
            array_push($result[$ip], $key);
        }
    }
}

$result = array_filter($result, function ($v, $k) {
    if ( count($v) > 1 ) {
        return true;
    } else {
        return false;
    }
}, ARRAY_FILTER_USE_BOTH);

var_dump($result);

尽管我认为使用SQL也更好。用PHP实现这一点可能非常慢。

我建议改用MySQL,结合使用
COUNT
have
$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;
    }
}
$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;
    }
}