在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,那么有人可以发布该变量,并有可能覆盖你的变量。我只想说小心使用。