Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP上创建互斥数组_Php_Arrays - Fatal编程技术网

在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数组的大小($login+count($used\u logins))。当然,这只有在没有并发请求的情况下才有效(您可以添加一个随机数以避免这种情况)

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


  • 如果无法在数据库中执行此操作,请使用
    $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错误:-)