正如我在评论中提到的,你可以使用数组走
$result = array();
$array = [0.1, 0.2, 1.1, 2.0, 2.5];
array_walk($array, function (&$value) use (&$result) {
$result[(string)$value] = ($value * 100) . '%';
});
var_dump($result);
输出
array(5) {
["0.1"]=> string(3) "10%"
["0.2"]=> string(3) "20%"
["1.1"]=> string(4) "110%"
[2]=> string(4) "200%" /// <-- int
["2.5"]=> string(4) "250%"
}
什么奇怪/有趣的是,我只注意到2不是一个字符串。无论如何,如果他们需要一位小数(并且只有一个),那么您可以使用number_format
代替这个版本。
$result = array();
$array = [0.1, 0.2, 1.1, 2.0, 2.5];
array_walk($array, function (&$value) use (&$result) {
$result[number_format($value,1)] = ($value * 100) . '%';
});
var_dump($result);
输出
array(5) {
["0.1"]=>
string(3) "10%"
["0.2"]=>
string(3) "20%"
["1.1"]=>
string(4) "110%"
["2.0"]=>
string(4) "200%"
["2.5"]=>
string(4) "250%"
}
如果有更多的小数位或他们是可变的,你可以算到小数点后的数字,并用其作为第二输入number_format
我能想到的至少2如何做到这一点。
你可以在这里测试他们
第一:
http://sandbox.onlinephpfunctions.com/code/30ec8bdc191095ac92a681b3f8fc964c66360c86
二:
http://sandbox.onlinephpfunctions.com/code/e02d45e6d02e79a2440110b7ffe6df93e76920d3
我只是想小数的事情,如果你WA nt以确保他们至少有一位小数,但有些可能有更多,那么你可以这样做。
array_walk($array, function (&$value) use (&$result) {
$key = (string)$value;
if(strlen($key) == 1)
$key = number_format($key, 1);
$result[$key] = ($value * 100) . '%';
});
这也可能使一个微秒的几分更快,因为你避免调用上可以简单地转换为浮动“2.1”的字符串表示的那些number_format
。然而,即使这会削减拖尾0,当有多个小数位时,“1.10”变为“1.1”,但至少可以让它们全部浮动。
您可以在这里看到
http://sandbox.onlinephpfunctions.com/code/e836076f7ee6c2e684d4ccca016101b288649f29
注意这一个我修改了几个值,如“1.101”和“1.10”来说明这一点。
对不起,但浮动键不允许在数组中。 –
@u_mulder,谢谢,我固定了钥匙。我的问题的核心思想仍然存在。现在请看我的问题,我已经修好了钥匙。谢谢! – Ryan
你可以使用那些'array_walk',但是你必须使用闭包的'use'部分。看到这个问答https://stackoverflow.com/questions/13271015/changing-array-keys-in-array-walk-function – ArtisticPhoenix