2017-03-17 146 views
0

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

我有一个$ _POST数组,我想把值放在一个数组中。这里是最后出来我想:

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

这里是抓时,$ _ POST包含一个整数的值与之间,然后一个字符串如“6月2日”,“5可能”等

空间

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

我试了一下:

$response = []; 

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

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

    $response[] = $result; 

} 

出于某种原因,结果并不如上面建议。任何想法和建议将不胜感激。

+2

你能在这里发布如何'回声 '

'.print_r($_POST, true).'
';'看起来像 – codtex

+1

此外,什么是你的结果得到些什么? – jeroen

+0

我只得到结果... @sand – Tajinere

回答

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); 
    

使用任一种处理所得到的$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()

+0

为什么你设置$ key变量,如果你不使用它? –

+0

为什么这个OP的代码不工作?它基本相同,但写法不同。 – jeroen

+0

对不起,我不得不赶紧吃晚饭,没有仔细检查发布之前,我删除了'$ key'变量。我的答案显示,当输入数组如预期时没有任何错误。维克多是正确的,缺陷是在输入数组中。 – mickmackusa

1

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

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

解析您的数据时没有任何检查。这些数据是由用户提交的,并不总是他们有你等待的格式。例如,如果你的HTML表单中有一个变量“日期”,你应该准备好$_POST['dates']将是你所有的'6月5日','7月7日'等等的数组。不要忘记检查并验证您收到的所有用户数据。安全原因也很重要。

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

+0

感谢您的建议,此代码只是一个快速检查,安全措施已到位..原因是表单有很多输入字段,我不想一个接一个地检查所有的。所以我使用formdata将数据发布到所说的php脚本 –

-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 
     ) 

) 
+0

这个答案假定传入的$ _POST数据是一个csv字符串,但是基于OP的处理方法,没有理由相信这是真的。 – mickmackusa

-1
$response = array(); 

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

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

    $response[] = $result; 

    } 
+0

请解释您的答案代码。 – Blackbam

+0

从发布数据中设置数组中的键/值对。谢谢。 – user1544541

+0

该答案使用比OP更多的代码来实现相同的结果。 – mickmackusa