这是我的第一篇文章,所以我很抱歉我可能没有发现任何错误。
我过去几天一直在摆弄表格和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;(变量名)作为其键。有没有自动执行此操作的方法?
我希望我已经清楚地说明了这个问题。
答案 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);