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

配列キーは動的であることに注意してください。静的キーと関連する値を使用して新しい配列を作成したいと思います。コードを実行すると、5つの異なる配列が得られます。

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 に答える