我有一个这样的数组(除了它有更多的键):
$passwords = array("key1","key2","key3");
要从数组中获取随机密钥,我已经这样做了:
$rand_keys = array_rand($passwords);
$rand_key = $passwords[$rand_keys];
现在我使用$rand_key
尝试登录用户。我想要检查密码是否有效,如果有,请回显“success:[password]”。我担心做echo "Success: $rand_key";
只会从数组中打印一个随机密钥而不是打印成功的密钥。
如何打印成功的密钥而不是另一个随机密钥?我想过使用会话,但我不确定。
答案 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
}