2014-07-23 3 views
3

이것은 내가 알지 못할 수있는 실수로 인해서 유감스럽게 생각합니다.PHP - 변수 이름을 키로 사용하여 연관 배열에 변수 추가

나는 과거의 양식과 POST를 지금 당황하고 있었고 특정 상황에 대해 궁금한 점이 있습니다.

본인의 기본 웹 양식에이 코드가 있습니다. 나는 아래와 같이 몇 가지 변수를 선언했다.

<?php 
    if (isset($_POST['submit'])) { 
    // Form submitted 
    $username = isset($_POST['username'])? $_POST['username']  : ""; 
    $password = isset($_POST['password'])? $_POST['password']  : ""; 
    $email = isset($_POST['email']) ? $_POST['email']  : ""; 
    $country = isset($_POST['country']) ? $_POST['country'] : ""; 
} 
?> 

나는 요소 등이 변수로 배열 form_data을 창조하고 싶었다, 그래서 다음에 삽입 :

<?php 
    $form_data = array(); 

    $form_data['username'] = $username; 
    $form_data['password'] = $password; 
    $form_data['email'] = $email; 
    $form_data['country'] = $country; 

    print_r($form_data); 
?> 

내 질문은 즉 내가 모르는 PHP에서 어떤 방법이를 내가 어디서 똑같은 결과를 얻을 수 있을까? 변수 이름은 배열에서 키로 할당 될 것이고 위의 코드에서와 같이 수동으로 키 이름을 입력하지 않는 것이 좋습니다. 내가 $number라는 변수가있는 경우


그래서 짧은에, 나는 그것의 키와 '수'(변수 이름)와 배열에 값을 추가 할. 이 작업을 자동으로 수행하는 방법이 있습니까?

나는이 질문을 충분히 명확하게하기를 희망한다.

+0

'컴팩트()'내가 무엇을 찾고 있었다이었다. 그 밖의 모든 답변을 보내 주셔서 감사합니다. – noidentity63

답변

4

당신은 사용할 수

$whitelist = array('username', 'password', 'email', 'country'); 

foreach($whitelist as $key) { 
    if(isset($_POST[$key]) && $_POST[$key] != '') 
     $form_data[$key] = $_POST[$key]; 
} 
2

루프로 수행 할 수 있습니다. 배열에서 submit 같은 항목을 제거하기 위해 당신이 중 하나를 화이트리스트 (계속) 것이다 변수 이름이나 블랙리스트 (제거)의 배열을 만듭니다

$blacklist = array('submit'); 

$form_data = array(); 
foreach($_POST as $key => $value) { 
    if(in_array($key, $blacklist)) 
     continue; // skip unwanted entries 

    $form_data[$key] = $value; 
} 

는 루프 중에 trim() 또는 다른 서식을 적용합니다.

$Keys=array_keys($_POST); 
for($i=0;$i<count($Keys);$i++){ 
    $form_data[$Keys[$i]]=$_POST[$Keys[$i]]; 
}  
print_r($form_data); 
+0

흑인/백인 목록 +1 스마트 대안! – Darren

1

당신은 array_keys 기능을 사용할 수 있습니다 : 당신이 계속 당신이 하려는 변수를 허용 목록에 추가하려는 경우

마찬가지로, 당신은 유사한 프로세스를 사용할 수 있습니다 compact :

$form_data = compact('username', 'password', 'email', 'country'); 

변수가 $username, $password, $email, and $country 인 경우 설명 된 배열이 만들어집니다.

컴팩트() 현재 심볼 테이블에 그 이름의 변수를 검색하고, 변수 이름 키와 변수의 내용을 해당 키 값이되어 지도록 출력 배열에 추가 .

또는 당신이 화이트리스트 방식을 할 수있는 :

function array_whitelist($array, $whitelist = array()) { 
    return array_merge(array_flip($whitelist), 
         array_intersect_key($array, array_flip($whitelist))); 
} 

$form_data = array_whitelist($_POST, array('username', 'password', 'email', 'country')); 
관련 문제