如何打印使用后使用array_rand()生成的相同值?

时间:2014-01-02 16:10:35

标签: php arrays

我有一个这样的数组(除了它有更多的键):

$passwords = array("key1","key2","key3");

要从数组中获取随机密钥,我已经这样做了:

$rand_keys = array_rand($passwords); 
$rand_key  = $passwords[$rand_keys];

现在我使用$rand_key尝试登录用户。我想要检查密码是否有效,如果有,请回显“success:[password]”。我担心做echo "Success: $rand_key";只会从数组中打印一个随机密钥而不是打印成功的密钥。

如何打印成功的密钥而不是另一个随机密钥?我想过使用会话,但我不确定。

1 个答案:

答案 0 :(得分:6)

  

我担心回音“成功:$ rand_key”;只会从数组中打印一个随机密钥,而不是打印成功的密钥。

不,它会打印变量所持有的内容。当你这样做时:

$rand_key  = $passwords[$rand_keys];

$rand_key变量不保留对$passwords[$rand_keys]概念的引用,它保留了执行$passwords[$rand_keys]一次产生的实际值。重新使用$rand_key变量将不再执行$passwords[$rand_keys],它将继续保留第一个且仅执行的值。

类似地,$rand_keys = array_rand($passwords);的结果在执行array_rand($passwords) 一旦和将结果存储在$rand_keys,使得结果不会改变时$rand_keys再次引用。

  

如何打印成功的密钥而不是另一个随机密钥?我想过使用会话,但我不确定。

啊,你是否试图在脚本的多次执行中保持该值?这完全是另一个问题,你可能认为$_SESSION在这里很有用。代码之外的任何持久性介质都可以工作,具体取决于您希望存储值的位置。 可能是会话状态就是您想要的。在这种情况下,当脚本首次运行时,您将在会话状态中保留您的值:

$_SESSION['rand_key'] = $rand_key;

然后当脚本再次执行时,您将检索该值:

$rand_key = $_SESSION['rand_key'];

由于它是同一个运行多次的脚本,当然你需要做一些状态检查以确定它是第一次还是第二次运行。毕竟,如果以前调用过它,脚本本身并不是知道,它只是按原样执行代码。检查此问题的简单方法可能只是查看该会话值是否存在:

if (isset($_SESSION['rand_key']) {
    // there's a session value in place, the random key has been generated already
} else {
    // the random key hasn't previously been generated
}