PHP - 使用变量名作为键向关联数组中添加变量

7
这是我的第一篇文章,如有不妥之处敬请谅解。
我最近在处理表单和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的变量,我想将其值添加到一个数组中,并将'number'(变量名)作为其键。是否有一种自动执行此操作的方法?
我希望我已经清楚地表达了这个问题。

compact() 就是我一直在寻找的。感谢您提供的其他答案,我也从中学到了很多。 - noidentity63
3个回答

16
你可以使用 compact
$form_data = compact('username', 'password', 'email', 'country');
只要您拥有变量$username、$password、$email和$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'));

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];
}

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接