我需要重命名动态数组键,并创建一个新数组。 这是给定的数组:
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 :(得分: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]);
}
}
}
答案 1 :(得分: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的组合(我猜),所以我用这些知识来强化正则表达式