在PHP上创建互斥数组

时间:2011-10-24 13:59:43

标签: php arrays

我有一组带有一组登录的数组$used_logins(可能很大),我需要生成一个包含$login+rand(1, 1000);的三个唯一登录的数组,这些登录不在$used_logins中阵列。

我怎样才能快速完成?

3 个答案:

答案 0 :(得分:1)

如果您无法在数据库中执行此操作:使用$used_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,每次使用数组搜索时,这可能比天真的方式更快。 (一个创建数组的副本,但array_search比密钥访问慢)

答案 1 :(得分:0)

如果这些登录位于数据库中,这可能是最有效的方式 - 在“可用登录”上左键连接到“使用过的登录”,并且可以在右侧对具有NULL的行进行过滤以获得“未使用”登录

答案 2 :(得分:0)

  1. 如果您始终生成登录信息,则可以使用其中的唯一编号(例如时间戳)。编辑:您还可以追加$ used_logins数组的大小($ login + count($ used_logins))。当然,这只有在没有并发请求的情况下才有效(您可以添加一个随机数来避免这种情况)。

  2. 如果其他用户可以创建登录,您可以使用in_array()函数检查登录是否已存在。