2012-11-15 58 views
0

我需要重命名動態數組鍵,並創建一個新的數組。 下面是給出數組:PHP Array重命名動態數組鍵

array(21) 
{ 
    ["0161"] => 
    array(5) 
    { 
     ["L_NAME0161"] => 
     string(13) "john%20Hewett" 
     ["L_TRANSACTIONID0161"] => 
     string(17) "50350073XN1446019" 
     ["L_AMT0161"] => 
     string(6) "8%2e50" 
     ["L_FEEAMT0161"] => 
     string(9) "%2d0%2e55" 
     ["L_NETAMT0161"] => 
     string(6) "7%2e95" 
    } 
    ["08591"] => 
    array(5) 
    { 
     ["L_NAME08591"] => 
     string(18) "Norbert%20Bendixen" 
     ["L_TRANSACTIONID08591"] => 
     string(17) "1WN98871MS4263823" 
     ["L_AMT08591"] => 
     string(6) "8%2e50" 
     ["L_FEEAMT08591"] => 
     string(9) "%2d0%2e55" 
     ["L_NETAMT08591"] => 
     string(6) "7%2e95" 
    } 
} 

這裏是我使用的代碼是不是爲我工作:

foreach ($reb AS $newrebarray) 
{ 
    foreach ($newrebarray as $ke => $val) 
    { 

     if (preg_match("/L_NETAMT/i", $ke)) 
     { 
      $newarrayreb1 = array('Net' => $val); 
     } 
     if (preg_match("/L_TRANSACTIONID/i", $ke)) 
     { 
      $newarrayreb1 = array('TransactID' => $val); 
     } 
     if (preg_match("/L_NAME/i", $ke)) 
     { 
      $newarrayreb1 = array('Name' => $val); 
     } 
    } 
} 

通知,數組鍵是動態的,我想創建一個新的帶有靜態鍵的數組以及相關的值。當我運行代碼時,我得到了五個不同的數組。

+0

所以基本上你只是想要去除這些鍵的數字,只留下最初的純文本部分,並用這些剝離的鍵構建一個新的數組? –

+0

是標記,那就是我想要的 –

回答

1

首先,我會定義一個函數,它基於捕獲內存更換正則表達式的片段:

function do_translate($match) 
{ 
    switch ($match[1]) { 
     case 'L_NAME': 
      return 'Name'; 

     case 'L_NETAMT': 
      return 'Net'; 

     case 'L_TRANSACTIONID': 
      return 'TransactID'; 
    } 
    // in all other cases, return the full match 
    return $match[0]; 
} 

然後在塊中迭代,通過轉換髮送數組鍵通,然後重新組合與現有值的新的鍵:

foreach ($reb as $id => $data) { 
     $new_keys = preg_replace_callback('/^(L_[A-Z]+)' . preg_quote($id) . '$/i', 'do_translate', array_keys($data)); 
     // create the new array with translated keys 
     $reb[$id] = array_combine($new_keys, $data); 
} 

我注意到,數組鍵是該領域和產品ID(我猜)的組合,所以我用這些知識來加強正則表達式

1

沒有測試過,還沒有完全甦醒過來,所以這可能會踢你的狗,並刪除所有遊戲存檔:

$translations = array(
    'L_TRANSACTIONID' => 'Translation', 
    'L_NAME' => 'Name', 
    'L_NETAMT' => 'Net' 
); 

foreach($array as $parentkey => $subarray) { 
    foreach($subarray as $subkey => $val) { 
     if (preg_match('/^(L_.*?)\d*$/', $matches)) { 
      $newKey = $translations[$matches[1]]; 
      $array[$parentkey][$newkey] = $val; 
      unset($array[$parentkey][$subkey]); 
     } 
    } 
} 
+0

+1只是第一行。 –