我有一个问题。我想缩放一些已存储在值中的CSS值。 (简化)我已经做了一个函数来按比例放大它们。
两件事我不对。
$string = '0.3rem';
$scale = 1.5;
echo calcCssNewValue( $string, $scale );
function calcCssNewValue( $string, $scale ){
$stringArray = preg_split('/[a-zA-Z]*/', $string, 2, PREG_SPLIT_DELIM_CAPTURE);
if ( count( $stringArray ) == 1 ) {
$returnVal = ( $stringArray[0] * $scale) ;
} else {
$returnVal = ( $stringArray[0] * $scale) . $stringArray[1];
}
return $returnVal;
}
result: '0,45em' expected: '0.45rem'
请注意,它缺少r
,并且用逗号代替了句点。
我哪里出错了? :)
答案 0 :(得分:3)
在运行您的代码时没有得到相同的结果,在空字符串和原始值数组中为我分割的结果。 *
可能是问题所在,因为它与模式的零匹配。
所以也不确定逗号,因为我看不到。
我会像这样调整您的拆分,似乎可以完成:
$stringArray = preg_split( '/([a-zA-Z]+)/', $string, 2, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY );
这需要:
()
中使定界符捕获工作起作用,因为它仅适用于该定居器答案 1 :(得分:0)
解决方案的最大部分来自@Rarst in this post.
我最终得到了以下代码:
function calcCssNewValue( $string, $scale ){
$stringArray = preg_split( '/([a-zA-Z]+)/', $string, 2, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY );
$returnVal = number_format( ( $stringArray[0] * $scale ), 2, '.', ''); ;
if ( count( $stringArray ) > 1 ) {
$returnVal .= $stringArray[1];
}
return $returnVal;
}
$stringArray
由@Rarst提供。
我添加了$returnVal
的{{1}}。并将小数点强制为实际点。不知何故,我不知道为什么,它将小数点更改为逗号。但是只有在做数学时...