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

时间:2017-03-17 08:08:41

标签: php arrays post

我知道可能有这方面的消息来源,但我尝试了一切,但我仍然没有得到正确的解决方案。这就是为什么我要求你帮忙。

我有一个$ _POST数组,我想将值放在一个数组中。这是我想要的最终结果:

$response = [
             ['category' => 2, 'value' => "june"],
             ['category' => 5, 'value' => "may"],
             ['category' => 8, 'value' => "april"]
            ]

这是catch,$ _POST包含一个整数的值,中间有一个空格,然后是一个字符串,例如“2月6日”,“5月5日”等等

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

我尝试了什么:

$response = [];

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

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

    $response[] = $result;

}

由于某种原因,结果不如上所述。任何想法和建议将不胜感激。

4 个答案:

答案 0 :(得分:1)

基本上,问题在于$ _POST。这是具有提交的键值数据的全局数组。你不应该使用

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

无需任何检查即可解析数据。这些数据由用户提交,并不总是具有您正在等待的格式。

例如,如果您的HTML表单中有一个变量“dates”,那么您应该准备好$_POST['dates']将是您所有'5月6日','7月7日'等的数组。等等。不要忘记检查并验证收到的所有用户数据。安全理由也很重要。

你的代码(foreach body,没有条件)没问题,我已经检查过了。尝试在print_r()之前设置explode(),您将看到您正在使用数组,而不是使用字符串。

答案 1 :(得分:0)

您的问题在将数据处理到正确的结果数组时没有问题。由于没有持有预期的数据,因此_POST的责任落在了上面。 这个问题的所有答案都无法修复您的$ _POST数据,因为您的问题没有提供html表单。可以提供的唯一潜在价值是优化阵列构建过程。

以下两种方法可以通过减少声明变量的数量来改善您的过程:

演示使用$a=array('2 june','5 may','8 april');来表示$ _POST数组。

  1. foreach循环中的单行:

    foreach($a as $v){
        $r[]=array_combine(["category","value"],explode(" ",$v));
    }
    
  2. 没有循环的单行:

    $r=array_map(function($v){return array_combine(["category","value"],explode(" ",$v));},$a);
    
  3. 使用任一流程,生成的$r将为:

    array (
      0 => 
      array (
        'category' => '2',
        'value' => 'june',
      ),
      1 => 
      array (
        'category' => '5',
        'value' => 'may',
      ),
      2 => 
      array (
        'category' => '8',
        'value' => 'april',
      ),
    )
    

    使用函数的参考: explode()array_combine()array_map()

答案 2 :(得分:-1)

试试这个:

    $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";

输出:

Array
(
    [0] => Array
        (
            [category] => 2
            [value] => june
        )

    [1] => Array
        (
            [category] => 5
            [value] => may
        )

    [2] => Array
        (
            [category] => 7
            [value] => july
        )

)

答案 3 :(得分:-1)

    $response = array();

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

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

    $response[] = $result;

    }