2012-03-24 29 views
0

特定のインデックスで2つの配列から値を取得するにはどうすればよいですか?私は$usernamesの配列と$passwordsの配列を持っています。 $username$passwordという変数もあります(これはユーザー名とパスワードを入力したものです)。値の配列からのインデックス(PHP)

私は$usernames$usernameのインデックスを取得し、$passwords$passwordのインデックスにそれを比較したいです。一致した場合、ユーザー名とパスワードは正しいです。そうでない場合、それらは正しくありません。

私はアレイがおそらくそれを行う最善の方法ではないが、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

まずPHPが既に1を持っているので、あなたはfunction returnIndexを必要としない:それは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

@Ali配列の関数参照を試してください。 '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 manual entry](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 
} 
ため のforeachではなく、 を使用します
関連する問題