2013-03-11 102 views
1

我有以下兩點:生成數據陣列與PARAM地圖

  1. $ _POST陣列與發佈數據
  2. $參數數組具有用於在期望的數據中的每個PARAM的路徑陣列。

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

我想生成如下面的例子中的$數據數組。 我該怎麼做? 請注意,$ params數組中的「路徑」如何用於爲數據數組構建鍵,並使用$ _POST數組填充數據。

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

你的問題到底是什麼?不是$ data = array(array ['User'] = $ _ POST ['name'])等工作嗎? – Voitcus 2013-03-11 13:20:15

+0

在具體的例子中,是的,但我想要基於$ params中的路徑以編程方式構建$ data數組。以上只是一個例子。相同的概念應在各個地方推導出來。 – preyz 2013-03-11 14:13:07

回答

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

+0

我爲你創建了一個[工作小提琴](http://phpfiddle.org/main/code/4vm-35d) – Voitcus 2013-03-11 14:32:13