У меня есть следующие две вещи:
$ 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
). Вы можете клонировать его каким-то образом.