2012-02-08 49 views
1

我从我的数据库中的记录,像这样,如何从多维数组中获得多个出现?

$q = $dbc -> prepare("SELECT id, username, loginIP FROM accounts"); 
$q -> execute(); 
while ($accounts = $q -> fetch(PDO::FETCH_ASSOC)) { 
     var_dump($accounts); 
} 

这让我所有的用户名和ID和用户的IPS,

我如何检查IPS的多次出现? IP存储使用ip2long,我试过以下,

$multiple = array_diff($accounts, array_unique($accounts)); 
var_dump($multiple); 

但它没有工作?

+0

你是什么意思是“多次出现IP?”你想知道阵列中每个唯一IP的数量? – ThinkingMonkey 2012-02-08 17:20:23

+0

为什么不通过SQL请求检查它? – Cheery 2012-02-08 18:14:10

+0

我该怎么做?我不知道这样做的MySQL函数? – cgwebprojects 2012-02-08 18:20:32

回答

1

替代版本 - 使用SQL请求,找到重复的。事情是这样的:

$q = $dbc -> prepare("SELECT a.id, a.username, a.loginIP FROM accounts a, 
      (SELECT loginIP FROM accounts GROUP BY loginIP HAVING COUNT(*)>1) d 
       WHERE d.loginIP = a.loginIP"); 
$q -> execute(); 
$accounts = array(); 
while ($acc = $q -> fetch(PDO::FETCH_ASSOC)) { 
     $accounts[$acc['loginIP']] = $acc; 
} 
var_dump($accounts); 

只有副本会出现在$帐户与IP地址为数组键。

+0

这真棒,更好,谢谢你! – cgwebprojects 2012-02-08 18:34:29

+0

@cgwebprojects欢迎您:)对不起,这里有一个单字母的错字'd.loginIP = a.loginIP',但我想你自己看到了。 – Cheery 2012-02-08 18:42:35

1

我假设的基础上,要查询的数据和你的国家,这个问题的方式,你正在寻找被绑定到多个用户,因为你要么

一个IP地址。想知道有多少实际用户被绑定到一个IP地址
b。找出有多少来自同一个人的重复账户。

我觉得像这样的东西不会做什么,

<?php 

$ip_accounts = array(); 

// This whole step could be done within the while loop, as shown by Josh. 
foreach ($accounts as $account) { 
    $ip = $account['loginIP']; 
    unset($account['loginIP']); 
    if (! isset($ip_accounts[$ip])) { 
    $ip_accounts[$ip] = array(); 
    } 
    $ip_accounts[$ip][] = $account; 
} 

function multi_accounts($ip_account) { 
    return count($ip_account) > 1; 
} 

$many_accounts = array_filter($ip_accounts, 'multi_accounts'); 
print_r($many_accounts); 

样本输出

[3232235821] => Array 
    (
     [0] => Array 
      (
       [id] => 22 
       [username] => u22 
      ) 

     [1] => Array 
      (
       [id] => 33 
       [username] => u33 
      ) 

    ) 

[3232235830] => Array 
    (
     [0] => Array 
      (
       [id] => 25 
       [username] => u25 
      ) 

     [1] => Array 
      (
       [id] => 31 
       [username] => u31 
      ) 

     [2] => Array 
      (
       [id] => 51 
       [username] => u51 
      ) 

     [3] => Array 
      (
       [id] => 91 
       [username] => u91 
      ) 

     [4] => Array 
      (
       [id] => 92 
       [username] => u92 
      ) 

    )