如何在多维数组(PHP)中添加$\u POST值?

如何在多维数组(PHP)中添加$\u POST值?,php,arrays,post,Php,Arrays,Post,我知道可能有来源,但我已经尝试了一切,我仍然没有得到正确的解决方案。这就是我请求你帮忙的原因 我有一个$\u POST数组,我想将值放入数组中。以下是我想要的最终结果: $response = [ ['category' => 2, 'value' => "june"], ['category' => 5, 'value' => "may"], ['category' => 8, 'val

我知道可能有来源,但我已经尝试了一切,我仍然没有得到正确的解决方案。这就是我请求你帮忙的原因

我有一个$\u POST数组,我想将值放入数组中。以下是我想要的最终结果:

$response = [
             ['category' => 2, 'value' => "june"],
             ['category' => 5, 'value' => "may"],
             ['category' => 8, 'value' => "april"]
            ]
这里有一个问题,$\u POST包含一个整数的值,中间有一个空格,然后是一个字符串,例如“6月2日”、“5月5日”等等

当我得到这个值时,我使用explode将其拆分,然后尝试将各个值添加到响应数组中。这只是增加了一个结果

我尝试的是:

$response = [];

foreach ($_POST as $key => $value) {

    $split = explode(" ", $value);
    $result = ['category' => $split[0], 'value' => $split[1]];

    $response[] = $result;

}

由于某些原因,结果与上述建议不同。如果您有任何想法和建议,我们将不胜感激。

您的问题与将数据处理到正确的结果数组没有任何关系。未持有预期数据的$u POST将承担责任。 此问题的所有答案都无法修复$\u POST数据,因为您的问题中没有提供html表单。唯一可以提供的潜在价值是优化阵列构建过程

以下两种方法通过减少已声明变量的数量来改进流程:

演示使用
$a=array('6月2日'、'5月5日'、'4月8日')
表示您的$\u POST数组

  • foreach回路中的一个衬里:

    foreach($a as $v){
        $r[]=array_combine(["category","value"],explode(" ",$v));
    }
    
  • 一个无回路的衬里:

    $r=array_map(function($v){return array_combine(["category","value"],explode(" ",$v));},$a);
    
  • 使用任一过程,结果
    $r
    将为:

    array (
      0 => 
      array (
        'category' => '2',
        'value' => 'june',
      ),
      1 => 
      array (
        'category' => '5',
        'value' => 'may',
      ),
      2 => 
      array (
        'category' => '8',
        'value' => 'april',
      ),
    )
    
    所用函数的参考:

    基本上,问题在于$\u帖子。这是带有已提交键值数据的全局数组。你不应该使用

    foreach ($_POST as $key => $value) {
    
    用于在不进行任何检查的情况下解析数据。这些数据是由用户提交的,它们并不总是具有您等待的格式

    例如,如果您的HTML表单中有一个变量“dates”,您应该准备好
    $\u POST['dates']
    将是所有“6月5日”、“7月7日”等的数组。不要忘记检查和验证您收到的所有用户数据。出于安全原因,这也很重要

    您的代码(针对每个主体,无条件)正常,我已经检查过了。在
    explode()
    之前尝试设置
    print\r()
    ,您将看到您使用的是数组,而不是字符串。

    尝试以下方法:

        $response = [];
        // just for example use this one
        $data = "2 june, 5 may, 7 july";
        $temp = explode(",", $data);
    
        // and you can use this one for your case
        /*$data = $_POST['var_name']; // var_name is your variable name from $_POST
        $temp = explode(",", $data);*/
    
        foreach ($temp as $key => $value) {
            $split = explode(" ", trim($value));
    
            foreach ($split as $val) {
                $result = ['category' => $split[0], 'value' => $split[1]];
            }
            $respon[] = $result;
        }
    
        echo "<pre>";
        echo print_r($respon);
        echo "</pre";
    

    你能在这里发布如何
    echo''。打印($\u post,true)。''看起来像那么,你得到的结果是什么?我只得到结果@桑迪只得到了结果@沙子-我不明白你想说什么。只需将这行代码放在脚本的顶部,然后将
    退出之后,在这里发布您在浏览器中看到的内容。如果你什么也没看到,那么你的数据似乎丢失了,请检查我的答案。谢谢。如果不使用$key变量,为什么要设置它?为什么在OP的代码不使用的情况下,这会起作用?它基本上是一样的,但写的不同。对不起,我不得不匆匆忙忙地去吃晚饭,在发布之前没有仔细检查,我删除了
    $key
    变量。我的回答表明,当输入数组如预期的那样时,没有任何错误。Victor是正确的,缺陷在输入数组中。感谢您的建议,此代码只是一个快速检查,安全措施已到位。。原因是表单有很多输入字段,我不想一个接一个地检查所有字段。因此,我使用formdata将数据发布到所说的php脚本中,从post数据在数组中设置键/值对。谢谢。这个答案使用了比OP中更多的代码来实现相同的结果。这个答案假设传入的$\u POST数据是csv字符串,但是基于OP的处理方法,没有理由相信这是真的。
    Array
    (
        [0] => Array
            (
                [category] => 2
                [value] => june
            )
    
        [1] => Array
            (
                [category] => 5
                [value] => may
            )
    
        [2] => Array
            (
                [category] => 7
                [value] => july
            )
    
    )
    
        $response = array();
    
        foreach ($_POST as $key => $value) {
    
        $split = '';
        $split = explode(" ", $value);
        $result = array('category' => $split[0], 'value' => $split[1]);
    
        $response[] = $result;
    
        }