【问题标题】:Generating data array from POST data with a param-map使用参数映射从 POST 数据生成数据数组
【发布时间】:2013-03-11 13:13:02
【问题描述】:

我有以下两件事:

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

我想生成 $data 数组,如下例所示。 我该怎么做? 请注意 $params 数组中的“路径”如何用于构建数据数组的键,并用 $_POST 数组中的数据填充它。

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

【问题讨论】:

  • 您的问题到底是什么? $data=array(array['User']=$_POST['name']) 等不起作用吗?
  • 在具体示例中,是的,但我想根据 $params 中的路径以编程方式构建 $data 数组。以上只是一个例子。在不同的地方应该衍生出相同的概念。

标签: php arrays


【解决方案1】:

我会使用引用变量:

$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 变量数据! (&amp;string 而不是string)。您可能想以某种方式克隆它。

【讨论】:

    猜你喜欢
    • 2012-05-18
    • 2010-11-20
    • 1970-01-01
    • 2015-03-28
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多