使用param-map从POST数据生成数据数组

时间:2013-03-11 13:13:02

标签: php arrays

我有以下两件事:

  1. $ _带有发布数据的POST数组
  2. $ params数组,其中包含所需数据数组中每个参数的路径。

    $_POST = array(
    'name'      => 'Marcus',
    'published' => 'Today',
    'url'       => 'http:://example.com',
    'layout'    => 'Some info...',
    );
    
    $params = array(
    'name'      => 'Invoice.name',
    'published' => 'Page.published',
    'url'       => 'Page.Data.url',
    'layout'    => 'Page.Data.layout',
    );
    
  3. 我想生成$ data数组,如下例所示。 我怎么能这样做? 请注意$ params数组中的“路径”如何用于构建数据数组的键,并使用$ _POST数组中的数据填充它。

    $data = array(
        'User' => array(
            'name' => 'Marcus',
        ),
        'Page' => array(
            'published' => 'Today',
            'Data' => array(
                'url' => 'http:://example.com',
                'layout' => 'Some info...',
            ),
        ),
    );
    

1 个答案:

答案 0 :(得分:0)

我会使用引用的变量:

$post = array( // I renamed it
  'name'      => 'Marcus',
  'published' => 'Today',
  'url'       => 'http:://example.com',
  'layout'    => 'Some info...',
);

$params = array(
  'name'      => 'Invoice.name',
  'published' => 'Page.published',
  'url'       => 'Page.Data.url',
  'layout'    => 'Page.Data.layout',
  );

echo '<pre>'; // just for var_dump()
foreach($post as $key=>$var){ // take each $_POST variable
  $param=$params[$key]; // take the scheme fields
  $path=explode('.',$param); // take scheme fields as an array
  $temp=array(); // temporary array to manipulate
  $temp_original=&$temp; // we need this the same as we're going to "forget" temp
  foreach($path as $pathvar){ // take each scheme fields
    $temp=&$temp[$pathvar]; // go deeper
    }
  $temp=$var; // that was the last one, insert it
  var_dump($temp_original); // analize carefully the output
}

现在你所要做的就是将它们全部组合起来,它们并不是你想要的,但这很容易。

请注意,每个$temp_original字段都指向$post个可变数据! (&string代替string)。你可能想以某种方式克隆它。