2014-07-23 72 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);