1

我有以下两件事:

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

1 回答 1

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)。您可能想以某种方式克隆它。

于 2013-03-11T14:30:40.150 回答