>I 有字符串是:
$string = '200AUD, 150USD, 80GBP, 1250000VND';
如何从 $string 转换为键 => 值的数组。
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() 函数的情况下解决这个问题的最佳主意吗?
您必须先使用以下命令分解字符串:
$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;
}
需要 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);
我更喜欢使用 sscanf()
像 @MarkBaker 的答案一样,因为它允许将数值显式转换为整数类型,但为了尽量减少周期数,我建议array_reduce()
,因为它将允许键声明。
代码:(演示)
$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]
)声明一个变量。 然后,该变量可以立即用于将金额推送到数组中,并将相关货币作为键。
无需任何棘手的解构,可以使用联合运算符 +
将关联元素添加到结果数组中。(演示)
var_export(
array_reduce(
explode(',', $string),
function ($result, $money) {
sscanf($money, '%d%s', $amount, $currency);
return $result + [$currency => $amount];
},
[]
)
);