我从我的数据库中获取记录,如此,
$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 :(得分:1)
我假设,根据您查询的数据以及您提出问题的方式,您正在寻找与多个用户绑定的IP地址,因为您要么
一个。想要查看有多少真实用户绑定到单个IP
湾找出来自同一个人的重复帐户数量。
我认为这样的事情会影响你的目标。
<?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);
SAMPLE OUTPUT
[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
)
)
答案 1 :(得分: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);
只有重复项才会显示在$ accounts中,其中IP为数组键。