php 将以逗号分隔的美元金额字符串拆分为关联数组,其中货币为键,金额为值

8fq7wneg  于 2023-01-24  发布在  PHP
关注(0)|答案(3)|浏览(186)

我的字符串是:

$string = '200AUD, 150USD, 80GBP, 1250000VND';

我如何从$字符串转换为一个数组与键=〉值.

Key: AUD => Value 200
Key: USD => Value 150
Key: GBP => 80
Key: VND => 1250000

更新日期:

@Mark Baker我的php版本是5.4,所以我不能测试你的代码,谢谢
@Aleatoric我使用这段代码,但是数组返回键和值的空格字符:

Array
(
    [ CHF] => 130 
    [  GBP] =>  80 
    [  USD] =>  125 
    [  DKK] =>  750 
    [  PLN] =>  400 
    [  CZK] =>  2500 
    [  YTL] =>  175 
    [  BGN] =>  175 
    [  RUB] =>  4000 
    [  RON] =>  400 
    [  SEK] =>  1000 
)

我已经使用trim()来去除所有的空间,但是你能告诉我不使用trim()函数的最佳方法吗?

g9icjywg

g9icjywg1#

你必须首先用以下命令分解字符串:

$array1 = explode(',', $string);

然后用foreach循环迭代元素,拆分字符串并将其放入关联数组中:

$array2 = array();
foreach($array1 as $string){
    $currency = trim(preg_replace("/[0-9]+/", "", $string));
    $value = trim(preg_replace("/[a-zA-Z]+/", "", $string));
    $array2[$currency] = $value;
}
vojdkbi0

vojdkbi02#

需要PHP〉= 5.5

$string = '200AUD, 150USD, 80GBP, 1250000VND';

$currencyArray = array_column(
    array_map(
        function ($value) {
            return sscanf($value, '%d%s');
        },
        explode(',', $string)
    ),
    0,
    1
);

var_dump($currencyArray);
bvuwiixz

bvuwiixz3#

我更喜欢使用sscanf(),就像@MarkBaker的回答一样,因为它允许将数值显式转换为整数类型,但是为了最小化循环次数,我推荐使用array_reduce(),因为它允许键声明。
代码:(Demo

$string = '200AUD, 150USD, 80GBP, 1250000VND';

var_export(
    array_reduce(
        explode(',', $string),
        function ($result, $amount) {
            [
                1 => $currency,
                0 => $result[$currency]
            ] = sscanf($amount, '%d%s');
            return $result;
        },
        []
    )
);

输出:

array (
  'AUD' => 200,
  'USD' => 150,
  'GBP' => 80,
  'VND' => 1250000,
)

在解构sscanf()的返回值时,上面的脚本首先为第二个元素([1])声明了一个变量,然后可以立即使用该变量将金额推送到以相关货币为键的数组中。
不需要任何复杂的重构,可以使用并集运算符+Demo)将关联元素添加到结果数组。

var_export(
    array_reduce(
        explode(',', $string),
        function ($result, $money) {
            sscanf($money, '%d%s', $amount, $currency);
            return $result + [$currency => $amount];
        },
        []
    )
);

相关问题