我尝试编写一个函数,该函数将采用不同数量的数组并对齐小数位,方法是为每个数字添加适当数量的
,其长度小于最长的数字长度。
看起来很长一段时间,我想知道是否有人对我如何做得更深入,更有效率有所了解。
$arr = array(12, 34.233, .23, 44, 24334, 234);
function align_decimal ($arr) {
$long = 0;
$len = 0;
foreach ( $arr as &$i ){
//change array elements to string
(string)$i;
//if there is no decimal, add '.00'
//if there is a decimal, add '00'
//ensures that there are always at least two zeros after the decimal
if ( strrpos( $i, "." ) === false ) {
$i .= ".00";
} else {
$i .= "00";
}
//find the decimal
$dec = strrpos( $i, "." );
//ensure there are only two decimals
//$dec+3 is the decimal plus two characters
$i = substr_replace($i, "", $dec+3);
//if $i is longer than $long, set $long to $i
if ( strlen($i) >= strlen($long) ) {
$long = $i;
}
}
//locate the decimal in the longest string
$long_dec = strrpos( $long, "." );
foreach ( $arr as &$i ) {
//difference between $i and $long position of the decimal
$z = ( $long_dec - strrpos( $i, "." ) );
$c = 0;
while ( $c <= $z ) {
//add a for each number of characters
//between the two decimal locations
$i = " " . $i;
$c++;
}
}
return $arr;
}
它可以运行okkaaay ...看起来真的很冗长。我确信有一百万种方法可以让它更短,更专业。谢谢你的任何想法!
答案 0 :(得分:2)
代码:
$array = array(12, 34.233, .23, 44, 24334, 234);;
foreach($array as $value) $formatted[] = number_format($value, 2, '.', '');
$length = max(array_map('strlen', $formatted));
foreach($formatted as $value)
{
echo str_repeat(" ",$length-strlen($value)).$value."<br>";
}
输出:
12.00<br>
34.23<br>
0.23<br>
44.00<br>
24334.00<br>
234.00<br>
浏览器呈现:
12.00
34.23
0.23
44.00
24334.00
234.00
答案 1 :(得分:2)
使用空间是显示器的要求吗?如果您不介意将“30”作为“30.000”出现,您可以使用number_format为您完成大部分工作,在您确定要使用的最大小数位数之后。
$item = "40";
$len = 10;
$temp = number_format($item,$len);
echo $temp;
另一种方法是使用sprintf格式化:
$item = "40";
$len = 10;
$temp = sprintf("%-{$len}s", $item);
$temp = str_replace(' ', ' ',$temp);
echo $temp;
答案 2 :(得分:1)
您是否考虑过将CSS元素与CSS对齐一起使用来为您执行此操作?
例如:
<div style="display:inline-block; text-align:right;">$10.00<br />$1234.56<div>
这将缓解使用空格手动调整对齐的问题。由于您正对齐并且有两个小数位,小数位将按您的意愿排列。您也可以使用<table>
执行此操作,在这两种情况下,如果需要,您只需通过JS检索完整值即可。
最后,使用空格假设您使用的是固定宽度的字体,但可能不一定如此。 CSS对齐允许您更有说服力地处理这个问题。