数组索引值(PHP)

时间:2012-03-24 17:55:19

标签: php arrays

如何从特定索引处的两个数组中获取值?我有一个$usernames数组和一个$passwords数组。我还有名为$username$password的变量(用户输入的用户名和密码)。

我想在$username中获取$usernames的索引,并将其与$password中的$passwords索引进行比较。如果匹配,则用户名和密码正确无误。如果没有,他们是不正确的。

我知道数组可能不是最好的方法,但它只适用于5人,并不是真正的绝密,只是一个简单的密码保护。

我试过了:

<?php
$usernames = array("test1", "test2");
$passwords = array("password1", "password2");
$list = array($usernames, $passwords);
if (in_array($userName, $usernames)) {
   $userNameIndex = returnIndex($usernames, $userName);   
   $passWordIndex = returnIndex($passwords, $password);   
   echo("it says:<br />");
   echo($userNameIndex . " and password: " . $passWordIndex);
} else {
  echo("Not In Array");
}
?>

<?php
function returnIndex($array, $value) {
    $ar = $array;

    $searchValue = $value;

    for($i=0; $i< count($ar); $i++) {
        if($ar[i] == $searchValue) return i;
    }
}
?>

然而它会返回

  

它说:

     

和密码:我

4 个答案:

答案 0 :(得分:3)

首先,您不需要function returnIndex,因为PHP已经有一个:它被称为array_search

您可以这样使用它:

$usernames = array("test1", "test2");
$passwords = array("password1", "password2");

$userIndex = array_search($username, $usernames, true);
$passIndex = array_search($password, $passwords, true);

if ($userIndex !== $passIndex || $userIndex === false) {
    die("authentication error");
}

但是:拥有单独的用户名和密码数组,虽然它确实有效,但实际上并不是最简单的方法。如果你将每个用户名和密码“靠近”会更好。如果决定完全掌握在您的手中,您可以使用用户名作为键和密码作为同一数组中的值:

$auth = array("test1" => "password1", "test2" => "password2");

通过这种方式,您可以更轻松地完成此操作,而无需任何业务功能:

if (!isset($auth[$username]) || $auth[$username] !== $password) {
    die("authentication error");
}

答案 1 :(得分:2)

您的意思是return $i在搜索功能中吗?另外,$ar[$i]

但老实说,使用标准库函数array_search()会更聪明,它会返回数组元素的索引(如果它在数组中)。

答案 2 :(得分:0)

如果我不得不偏爱array_search,我会使用 foreach 而不是

foreach($array_name as $key => $value) {
    echo $key;     // echoes index of an array
    echo $value;   // echoes value of an array
}

答案 3 :(得分:-2)

使用array_search()代替吗?

http://www.w3schools.com/php/func_array_search.asp

更新:

$userNameIndex = array_search($userName, $usernames);
$paswordIndex = array_search($pasword, $passwords);