2013-09-06 4 views
0

배열을 연습하기 위해 부분적으로 간단한 시나리오를 시도하고 있습니다. 아래 코드는 usernamepassword 변수 조합을 단순히 병합 배열과 비교하는 것입니다.PHP - 배열 키와 값 비교

효과가 있지만 크게 개선 될 수 있다고 생각합니다.

<?php 
$username = '[email protected]';  
$password = '123456'; 

$allowed_creds1 = array('[email protected]'=>'123456'); 
$allowed_creds2 = array('[email protected]'=>'654321'); 
$allowed_creds3 = array('[email protected]'=>'124578'); 
$mergedArrays = array_merge($allowed_creds1, $allowed_creds2, $allowed_creds3); 

foreach($mergedArrays as $key => $val){ 
    echo "$key, $val \n"; 
    if($username == $key && $password == $val){ 
     die("Valid Username and Password"); 
    } 
} 
?> 

이상적으로 나는 참/거짓 반환으로 유효성을 검사하여 더 많은 작업을 수행 할 수 있습니다. 부울 값을 반환하는 사용자 정의 함수 안에 foreach 루프를 두는 것을 고려해 보았습니다.하지만 복잡하기 시작하기 전에 병합 된 배열에 내 PHP 변수의 유효성을 검사하는 더 나은 방법이 있는지 물어야한다고 생각합니다.

답변

0

찾고있는 키를 알고있을 때 배열을 반복 할 필요가 없습니다. 키를 사용하여 값을 확인하기 만하면됩니다.

if ($mergedArrays[$username] == $password) { 
    return TRUE; 
} 
0

어레이 키와 사용자 이름을 사용하고 있기 때문에, 당신은 단순히 키의 존재 여부를 확인할 수 있습니다 :이되지 않을 수 있습니다 사용자 이름의 대소 문자를 구분합니다 (많은 사용자를 만드는

if (!empty($mergedArrays[$username]) && $mergedArrays[$username] === $password) { 
    return true; 
} 

주 이것을 기대하십시오). 엄격한 비교 (===)에 유의하십시오. 이 방법으로 문자열을 비교할 때 잘못된 결과를 초래할 수있는 숫자 캐스팅을 피할 필요가 있습니다. 예 :

echo ('0x04d' == '77'); // returns true 

당연히 데이터베이스에 해시/암호화를 통해이 정보를 저장하고 확인해야합니다. 키가 호출이있는 경우

0

확인하여 $username이 키를 가진 요소가 암호와 같은 유효한 값이있는 경우 다음 확인 :

if (array_key_exists($username , $mergedArrays)) { 
    if(password==$mergedArrays[$username]) return true; 
}