2012-03-24 3 views
0

Как получить значение из двух массивов по определенному индексу? У меня есть массив $usernames и массив $passwords. У меня также есть переменные, называемые $username и $password (которые являются введенными пользователем и паролем).Значение из массива по индексу (PHP)

Я хочу, чтобы получить индекс $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

** Ответ: ** Прочтите Руководство. – rdlowrey

+1

http: // php.net/array – hakre

+0

Сохраните себе много работы и вместо этого используйте ассоциативный массив: '$ users = array (" user1 "=>" password1 "," user2 "=>" password2 ");' затем проверьте с помощью 'if ($ users [$ username] == $ password) {... '. –

ответ

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"); 
} 
2

ли вы имеете в виду return $i в вашей функции поиска? Кроме того, $ar[$i]?

Хотя, честно говоря, было бы разумнее использовать стандартную библиотечную функцию для этого, array_search(), которая возвращает индекс элемента массива, если он находится в массиве.

+0

Я действительно прошел через php.net/array и не упоминает array_search() до нижней части комментариев, и он не объясняет, что он делает. –

+0

@ Попробуйте ссылку на функцию для массивов. Конкретная страница для 'array_search()' находится по адресу http://php.net/manual/en/function.array-search.php. –

-2

Использовать array_search() вместо этого?

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

UPDATE:

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

Пожалуйста, не ссылайтесь на [w3fools.com] (http://w3fools.com) как ответ переполнения стека. По крайней мере, укажите соответствующий [PHP-ввод вручную] (http://php.net/manual/en/function.array-search.php). – rdlowrey

+0

@rdlowrey: Почему бы и нет? Почему w3schools не является приемлемой ссылкой? – Stefan

+1

Нет, это не приемлемая ссылка. –

0

Если я должен был предпочесть что-то кроме array_search, я хотел бы использовать Еогеасп, а не для

foreach($array_name as $key => $value) { 
    echo $key;  // echoes index of an array 
    echo $value; // echoes value of an array 
} 
Смежные вопросы