在PHP上创建互斥数组
我有一个数组在PHP上创建互斥数组,php,arrays,Php,Arrays,我有一个数组$used\u logins和一组登录名(可以很大),我需要生成一个包含三个唯一登录名的数组,如$login+rand(11000)不在$used\u logins数组中 如何快速做到这一点?如果这些登录名位于数据库中,这可能是最有效的方法-在“可用登录名”与“已使用登录名”之间进行左连接,然后可以在右侧为空的行上进行筛选,以获得“未使用的登录名” 如果登录总是由您生成,您可以在其中使用唯一的号码(例如时间戳)。编辑:您还可以附加$used\u logins数组的大小($login+
$used\u logins
和一组登录名(可以很大),我需要生成一个包含三个唯一登录名的数组,如$login+rand(11000)
不在$used\u logins
数组中
如何快速做到这一点?如果这些登录名位于数据库中,这可能是最有效的方法-在“可用登录名”与“已使用登录名”之间进行左连接,然后可以在右侧为空的行上进行筛选,以获得“未使用的登录名”
如果无法在数据库中执行此操作,请使用
$used\u logins
的键存储数据。然后检查是否存在具有该键的元素
$k_used_logins = array_flip($used_logins); // Complexity is O(n)
$logins = array();
do {
$l = $login+rand(1, 1000);
if (!isset($k_used_logins[$l])) { // Complexity O(1)
$logins[] = $l;
}
} while (sizeof($logins) != 3);
根据数组的sie,这可能比每次使用数组搜索的简单方法要快。(创建数组的副本,但数组搜索速度比键访问慢)
$used\u logins
-它是关联数组'key'=>'login'
,因此我收到一个错误只能翻转字符串和整数值
是否有任何方法使其成为非关联数组?我希望你的意思是!isset($k_used_logins[$l])
您能提供更多关于数组结构的信息吗?感谢您通知isset错误:-)