0

我需要重命名动态数组键,并创建一个新数组。这是给定的数组:

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);
        }
    }
}

请注意,数组键是动态的,我想用静态键和相关值创建一个新数组。当我运行代码时,我得到了五个不同的数组。

4

2 回答 2

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 的组合(我猜),所以我用这些知识来加强正则表达式

于 2012-11-15T14:51:41.077 回答
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]);
       }
    }
}
于 2012-11-15T14:41:10.220 回答