2014-07-23 106 views
3

這是我的第一篇文章,所以我很抱歉我可能沒有意識到任何錯誤。PHP - 將變量添加到變量名爲關鍵字的關聯數組中

我一直在擺弄過去幾天的表格和POST,我對某種情況有個奇怪的問題。

我在我的基本Web窗體中有此代碼。我聲明瞭一些變量,如下所示。

<?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

你可以使用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')); 
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()或其他格式。

同樣的,如果你想白名單要變量保持你可以使用一個類似的過程:

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

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

+1智能替代黑白名單! – Darren

1

您可以使用array_keys功能

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