如何从 PHP 中的非常大的字符串中获取自定义字符

How to get custom characters from very large string in PHP

我有一串货币 - 货币代码、名称和汇率(第一个汇率是单位每欧元,第二个是每单位欧元)。

string(6429) "                                USD     US Dollar       1,164342        0,858854        
EUR     Euro1,000000 1,000000        GBP     British Pound   0,842392        1,187096        
INR     Indian Rupee    87,128927       0,011477        AUD     Australian Dollar    1,549853        0,645222        CAD     Canadian Dollar 1,435142        0,696795        SGD     Singapore Dollar        1,564234        0,639291    CHF      Swiss Franc     1,070921        0,933776        MYR     Malaysian Ringgit       4,846357        0,206341        JPY     Japanese Yen    132,999525  0,007519 CNY     Chinese Yuan Renminbi   7,444264        0,134332        NZD     New Zealand Dollar      1,616910        0,618464        THB     Thai Baht   38,890927        0,025713        HUF     Hungarian Forint        362,270767      0,002760        AED     Emirati Dirham  4,276047        0,233861        HKD Hong Kong Dollar 9,052195        0,110470        MXN     Mexican Peso    23,485298       0,042580        ZAR     South African Rand      16,811235       0,059484     PHP     Philippine Peso 59,132446       0,016911        

等等... 重要 - 这是 copy/paste 字符串,因此空白计数与示例中的一样,它可以在整数和单词之间随机排列。 字符串在一行中,没有换行符。

所以我的目标是获取货币代码和货币汇率“单位每欧元”(第一个值)

首选输出关联数组。

示例:

$pairs = [
    'USD' => 1,164342,
    'GBP' => 0,842392,
];

每种货币依此类推。

我无法使用任何 API。

谁能帮我完成这个任务?

更新:一段带有换行符的原始字符串

string(6667) "Valūtas kods   Valūtas nosaukums      Vienības par EUR       EUR par vienību        
USD     US Dollar       1,164342        0,858854        
EUR     Euro    1,000000        1,000000        
GBP     British Pound   0,842392        1,187096        
INR     Indian Rupee    87,128927       0,011477        
AUD     Australian Dollar       1,549853        0,645222        
CAD     Canadian Dollar 1,435142        0,696795        
SGD     Singapore Dollar        1,564234        0,639291        
CHF     Swiss Franc     1,070921        0,933776        
MYR     Malaysian Ringgit       4,846357        0,206341        
JPY     Japanese Yen    132,999525      0,007519        
CNY     Chinese Yuan 
Renminbi        7,444264        0,134332        
NZD     New Zealand Dollar      1,616910        0,618464   

希望这是您需要的。请检查

    $string = "                                USD     US Dollar       1,164342        0,858854        
EUR     Euro1,000000 1,000000        GBP     British Pound   0,842392        1,187096        
INR     Indian Rupee    87,128927       0,011477        AUD     Australian Dollar    1,549853        0,645222        CAD     Canadian Dollar 1,435142        0,696795        SGD     Singapore Dollar        1,564234        0,639291    CHF      Swiss Franc     1,070921        0,933776        MYR     Malaysian Ringgit       4,846357        0,206341        JPY     Japanese Yen    132,999525  0,007519 CNY     Chinese Yuan Renminbi   7,444264        0,134332        NZD     New Zealand Dollar      1,616910        0,618464        THB     Thai Baht   38,890927        0,025713        HUF     Hungarian Forint        362,270767      0,002760        AED     Emirati Dirham  4,276047        0,233861        HKD Hong Kong Dollar 9,052195        0,110470        MXN     Mexican Peso    23,485298       0,042580        ZAR     South African Rand      16,811235       0,059484     PHP     Philippine Peso 59,132446       0,016911        ";


preg_match_all('/(USD|GBP)[^\d]*(\d*,?\d*)/', $string, $output);

if ($output) {
    var_dump(array_combine($output[1], $output[2]));
}

如果您需要其他货币,只需更改货币列表,例如只有 usd 和 gbp 将是 USD|GBP 等等