Генерация массива данных из данных POST с помощью param-map

У меня есть следующие две вещи:

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

Я бы использовал ссылочные переменные:

 $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 ). Вы можете клонировать его каким-то образом.