2012-11-15 56 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只是第一行。 –