正如我在評論中提到的,你可以使用數組走
$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