我有一个像这样的数组(除了它有更多的键):
$passwords = array("key1","key2","key3");
Run Code Online (Sandbox Code Playgroud)
要从数组中获取随机密钥,我已经这样做了:
$rand_keys = array_rand($passwords);
$rand_key = $passwords[$rand_keys];
Run Code Online (Sandbox Code Playgroud)
现在我$rand_key用来尝试登录用户.我想要做的是检查密码是否有效,如果有,请回复"success:[password]".我担心做的echo "Success: $rand_key";只是从数组中打印一个随机密钥而不是打印成功的密钥.
如何打印成功的密钥而不是另一个随机密钥?我想过使用会话,但我不确定.
我担心回应"成功:$ rand_key"; 只会从数组中打印一个随机密钥,而不是打印成功的密钥.
不,它会打印变量所持有的内容.当你这样做:
$rand_key = $passwords[$rand_keys];
Run Code Online (Sandbox Code Playgroud)
该$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;
Run Code Online (Sandbox Code Playgroud)
然后当脚本再次执行时,您将检索该值:
$rand_key = $_SESSION['rand_key'];
Run Code Online (Sandbox Code Playgroud)
由于它是同一个运行多次的脚本,因此您自然需要进行一些状态检查以确定它是第一次还是第二次运行.毕竟,脚本不会天生就知道它之前是否被调用过,它只是按原样执行代码.检查这个的简单方法可能只是查看该会话值是否存在:
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
}
Run Code Online (Sandbox Code Playgroud)