在php中从$\u POST数组创建变量
我有一个在php中从$\u POST数组创建变量,php,arrays,post,Php,Arrays,Post,我有一个$\u POST数组,如下所示: Array ( [veryfy_doc_type] => Array ( [0] => 1 [1] => 2 ) [id_number] => Array ( [0] => 3242424 [1] =>
$\u POST
数组,如下所示:
Array
(
[veryfy_doc_type] => Array
(
[0] => 1
[1] => 2
)
[id_number] => Array
(
[0] => 3242424
[1] => 4456889
)
[document_issuer] => Array
(
[0] => 1
[1] => 3
)
[verify_doc_expiry_date] => Array
(
[0] => 2016-01-26
[1] => 2015-02-20
)
[doc_id] => Array
(
[0] => 15
[1] => 16
)
[user_id] => Array
(
[0] => 14
[1] => 14
)
)
使用这个数组,我需要将每个值转换成php变量
我试过这样的方法,但对我不起作用
foreach($_POST AS $k => $v) {
//print_r($v);
list($doc_type, $id_number, $issuer, $expiry_date, $doc_id, $user_id) = $v;
}
echo "Type = $doc_type";
谁能告诉我怎么解决这个问题吗。
多谢各位 因此您希望在循环主数组时引用每个子数组值。。。也许是这样的
// Loop one of the sub arrays - you need to know how many times to loop!
foreach ($_POST['veryfy_doc_type'] as $key => $value) {
// Filter the main array and use the $key (0 or 1) for the callback
$rowValues = array_map(function($row) use ($key) {
// Return the sub-array value using the $key (0 or 1) for this level
return $row[$key];
}, $_POST);
print_r($rowValues);
}
例如:
这将为每一组数据生成结构化数组
从这里开始,我建议您保持数组的原样,而不是导出为变量,但如果您愿意,您可以使用示例中的
list()
。因此,您希望在循环主数组时引用每个子数组值。。。也许是这样的
// Loop one of the sub arrays - you need to know how many times to loop!
foreach ($_POST['veryfy_doc_type'] as $key => $value) {
// Filter the main array and use the $key (0 or 1) for the callback
$rowValues = array_map(function($row) use ($key) {
// Return the sub-array value using the $key (0 or 1) for this level
return $row[$key];
}, $_POST);
print_r($rowValues);
}
例如:
这将为每一组数据生成结构化数组
从这里,我建议您保持数组的原样,而不是导出为变量,但如果您愿意,可以使用示例中的list()
。您可以使用:
<?php
$post = array(
'veryfy_doc_type' => array('1','2'),
'id_number' => array('3242424','4456889'),
'document_issuer' => array(1,3),
'verify_doc_expiry_date' => array('2016-01-26','2015-02-20'),
'doc_id' => array(15,16),
'user_id' => array(14,14)
);
$mit = new MultipleIterator(MultipleIterator::MIT_NEED_ALL|MultipleIterator::MIT_KEYS_ASSOC);
foreach($post as $k=>$v) {
$mit->attachIterator( new ArrayIterator($v), $k);
}
foreach( $mit as $row ) {
echo $row['doc_id'], ' ', $row['id_number'], ' ', $row['verify_doc_expiry_date'], "\r\n";
}
如果您可以控制客户端代码,那么可以通过php自动构建此结构的方式更改POST参数的名称。例如
<form method="POST" action="test.php">
<input type="hidden" name="record[0][veryfy_doc_type]" value="1" />
<input type="hidden" name="record[0][id_number]" value="3242424" />
<input type="hidden" name="record[0][document_issuer]" value="1" />
<input type="hidden" name="record[0][verify_doc_expiry_date]" value="2016-01-26" />
<input type="hidden" name="record[0][doc_id]" value="15" />
<input type="hidden" name="record[0][user_id]" value="14" />
<input type="hidden" name="record[1][veryfy_doc_type]" value="2" />
<input type="hidden" name="record[1][id_number]" value="4456889" />
<input type="hidden" name="record[1][document_issuer]" value="3" />
<input type="hidden" name="record[1][verify_doc_expiry_date]" value="2015-02-20" />
<input type="hidden" name="record[1][doc_id]" value="16" />
<input type="hidden" name="record[1][user_id]" value="14" />
<input type="submit" />
</form>
会这样做/导致这样做。您可以使用:
<?php
$post = array(
'veryfy_doc_type' => array('1','2'),
'id_number' => array('3242424','4456889'),
'document_issuer' => array(1,3),
'verify_doc_expiry_date' => array('2016-01-26','2015-02-20'),
'doc_id' => array(15,16),
'user_id' => array(14,14)
);
$mit = new MultipleIterator(MultipleIterator::MIT_NEED_ALL|MultipleIterator::MIT_KEYS_ASSOC);
foreach($post as $k=>$v) {
$mit->attachIterator( new ArrayIterator($v), $k);
}
foreach( $mit as $row ) {
echo $row['doc_id'], ' ', $row['id_number'], ' ', $row['verify_doc_expiry_date'], "\r\n";
}
如果您可以控制客户端代码,那么可以通过php自动构建此结构的方式更改POST参数的名称。例如
<form method="POST" action="test.php">
<input type="hidden" name="record[0][veryfy_doc_type]" value="1" />
<input type="hidden" name="record[0][id_number]" value="3242424" />
<input type="hidden" name="record[0][document_issuer]" value="1" />
<input type="hidden" name="record[0][verify_doc_expiry_date]" value="2016-01-26" />
<input type="hidden" name="record[0][doc_id]" value="15" />
<input type="hidden" name="record[0][user_id]" value="14" />
<input type="hidden" name="record[1][veryfy_doc_type]" value="2" />
<input type="hidden" name="record[1][id_number]" value="4456889" />
<input type="hidden" name="record[1][document_issuer]" value="3" />
<input type="hidden" name="record[1][verify_doc_expiry_date]" value="2015-02-20" />
<input type="hidden" name="record[1][doc_id]" value="16" />
<input type="hidden" name="record[1][user_id]" value="14" />
<input type="submit" />
</form>
这可能会对您有所帮助,因为您还可以在php中使用
extract
来创建变量
<?php
$_POST = array(
'veryfy_doc_type'=> array(1,2),
'id_number' => array(3242424,4456889),
'document_issuer'=> array(1,3),
'verify_doc_expiry_date'=> array('2016-01-26','2015-02-20'),
'doc_id' => array(15,16),
'doc_id' => array(14,14)
);
extract($_POST);
print_r($veryfy_doc_type);
print_r($id_number);
这可能会对您有所帮助,因为您还可以在php中使用extract
来创建变量
<?php
$_POST = array(
'veryfy_doc_type'=> array(1,2),
'id_number' => array(3242424,4456889),
'document_issuer'=> array(1,3),
'verify_doc_expiry_date'=> array('2016-01-26','2015-02-20'),
'doc_id' => array(15,16),
'doc_id' => array(14,14)
);
extract($_POST);
print_r($veryfy_doc_type);
print_r($id_number);
如果您只想获取post的值,那么您可以使用一个简单的多维循环。没有必要把它扩大
foreach($_POST as $keyName => $row){
// $keyName will be verify_doc_type, id_number, etc..
foreach($row as $value){
// do something
echo $value;
}
}
希望这能有所帮助。如果你只想得到文章的价值,那么你可以有一个简单的多维循环。没有必要把它扩大
foreach($_POST as $keyName => $row){
// $keyName will be verify_doc_type, id_number, etc..
foreach($row as $value){
// do something
echo $value;
}
}
希望有帮助。此方法将生成与POST数组同名的变量:
foreach ($_POST as $k => $v )
{
$$k = addslashes(trim($v ));
}
此方法将生成与POST数组中相同名称的变量:
foreach ($_POST as $k => $v )
{
$$k = addslashes(trim($v ));
}
$\u POST是php变量,因此值已经是“in”one;-)$单据类型是1还是2?不可能both@Dagon,$doc\u类型值不能相同。@Terminus,我检查了您链接的问题。但不确定它对这种情况有何帮助。你能给我举个例子吗。谢谢。您尝试过使用extract吗?$\u POST是php变量,因此值已经是“in”one;-)$单据类型是1还是2?不可能both@Dagon,$doc\u类型值不能相同。@Terminus,我检查了您链接的问题。但不确定它对这种情况有何帮助。你能给我举个例子吗。谢谢。您尝试过使用extract吗?您能告诉我如何在foreach循环中使用list()
。我试过这样的列表($doc\u type,$id\u number,$issuer,$expiration\u date,$doc\u id,$user\u id)=$row代码>。但是它有未定义的偏移量:5
错误。将乘法器::MIT\u KEYS\u ASSOC
更改为乘法器::MIT\u KEYS\u NUMERIC
。但为什么不直接使用$row呢?不需要额外污染变量名称空间。我需要执行更新查询。类似这样的内容:$stmt->bind_param('iissii',$doc_type,$id_number,$issuer,$expiration_date,$doc_id,$user_id);foreach($mit as$row){list($doc_type,$id_number,$issuer,$expiration_date,$doc_id,$user_id)=$row;$stmt->execute();}
是否有其他方法不使用list()
来执行此操作;在这种特殊情况下,我也会选择list()。您能告诉我如何在foreach循环中使用list()
。我试过这样的列表($doc\u type,$id\u number,$issuer,$expiration\u date,$doc\u id,$user\u id)=$row代码>。但是它有未定义的偏移量:5
错误。将乘法器::MIT\u KEYS\u ASSOC
更改为乘法器::MIT\u KEYS\u NUMERIC
。但为什么不直接使用$row呢?不需要额外污染变量名称空间。我需要执行更新查询。类似这样的内容:$stmt->bind_param('iissii',$doc_type,$id_number,$issuer,$expiration_date,$doc_id,$user_id);foreach($mit as$row){list($doc_type,$id_number,$issuer,$expiration_date,$doc_id,$user_id)=$row;$stmt->execute();}
是否有其他方法不使用list()
来执行此操作;在这种特殊情况下,我也会使用list()。在处理发布的数据时,建议使用危险的东西。很多东西都是危险的。这取决于开发人员做出的决定。@Robbiee我不知道如果他只使用您知道的某个索引会有什么危险。我想您也在说使用$\u POST['POST\u name']变量是危险的。。事实上,你知道post_name索引,我的意思是如果你在脚本中使用$userId,那么有人可以发布该变量,并有可能覆盖你的变量。我想说的就是小心使用。当你处理发布的数据时,建议使用危险的东西。很多东西都是危险的。这取决于开发人员做出的决定。@Robbiee我不知道如果他只使用您知道的某个索引会有什么危险。我想您也在说使用$\u POST['POST\u name']变量是危险的。。事实上,你知道post_name索引,我的意思是如果你在脚本中使用$userId,那么有人可以发布该变量,并有可能覆盖你的变量。我只想说小心使用。