PHP - 将变量添加到关联数组中,并将变量名称作为键

时间:2014-07-23 03:24:13

标签: php arrays

这是我的第一篇文章,所以我很抱歉我可能没有发现任何错误。

我过去几天一直在摆弄表格和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的变量,我想将其值添加到一个数组中,其中以数字&#39;(变量名)作为其键。有没有自动执行此操作的方法?

我希望我已经清楚地说明了这个问题。

3 个答案:

答案 0 :(得分:8)

您可以使用compact

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

只要你有变量$username, $password, $email, and $country,它就会创建你描述的数组。

  

compact()在当前符号表中查找具有该名称的变量,并将其添加到输出数组,以便变量名称成为键,变量的内容成为那把钥匙。

或者,您可以采用白名单方法:

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'));

答案 1 :(得分: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];
}

答案 2 :(得分: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);