如何从输入表单创建关联多维数组

时间:2017-05-14 02:02:42

标签: php html arrays forms multidimensional-array

我需要从输入表单创建多维数组,因为我想将信息传递给mysql。我创建了它,但是如何才能使它成为关联的呢? 我的意见:

1.1*3 -> 3.3000000000000003
0.2*7 -> 1.4000000000000001

这是现在的打印方式:

echo "<input type='number' name='hours_to_save[$my_date][$project[$i]]'/>"

但我想这样:

array(30) {
    ["2017-05-01"]=>
        array(3) {
            ["kompan"]    => string(1) "2"
            ["5 ogrodow"] => string(1) "3"
            ["karolowo"]  => string(1) "4"
    },
    ...
}

2 个答案:

答案 0 :(得分:1)

输入:

$input=array(
    "2017-05-01"=>["kompan"=>"2","5 ogrodow"=>"3","karolowo"=>"4"],
    "2017-05-02"=>["kompan"=>"5","5 ogrodow"=>"6","karolowo"=>"7"]    
);

方法#1(建议foreach() x2 *)

foreach($input as $d=>$a){
    foreach($a as $k=>$v){
        $result[$d][]=['project'=>$k,'hours'=>$v];
    }
}
var_export($result);

这意味着:

$result                         // declare output array
       [$d]                     // use the date values as keys
           []=                  // autoincrement the keys in the subarray
              ['project'=>$k,   // each subarray's 1st element will use 'project' as the key and the input subarray's key as its value
               'hours'=>$v];    // each subarray's 2nd element will use 'hours' as the key and the input subarray's value as its value

方法#2(foreach()&amp; array_map() - array_keys() *纯粹用于演示)

foreach($input as $k=>$a){
    $result[$k]=array_map(function($a,$b){return ['project'=>$a,'hours'=>$b];},array_keys($input[$k]),$input[$k]);
}
var_export($result);

输出(无论方法如何):

array (
  '2017-05-01' => 
  array (
    0 => 
    array (
      'project' => 'kompan',
      'hours' => '2',
    ),
    1 => 
    array (
      'project' => '5 ogrodow',
      'hours' => '3',
    ),
    2 => 
    array (
      'project' => 'karolowo',
      'hours' => '4',
    ),
  ),
  '2017-05-02' => 
  array (
    0 => 
    array (
      'project' => 'kompan',
      'hours' => '5',
    ),
    1 => 
    array (
      'project' => '5 ogrodow',
      'hours' => '6',
    ),
    2 => 
    array (
      'project' => 'karolowo',
      'hours' => '7',
    ),
  ),
)

答案 1 :(得分:0)

您可以使用 foreach 循环插入到mysql。 Foreach将继续结束阵列。

$newArr = [];
$i=0;
foreach ($yourArray as $key=>$val) {
   $newArr['date'] = $key;
   foreach ($val as $dKey=>$row) {
      $newArr['date'][$i]['project'] = $dKey;
      $newArr['date'][$i]['hours'] = $row;
      $i++;
   }
}
相关问题