可使用的其他内置函数?或者你找到的任何代码片段


alternative built-in function to use ? or any code snippets you got there?

money_format在windows上不起作用,至少从我在手册中读到的……但我得到了这个应用程序,其中它使用money_format(),我猜它在生产服务器上没有问题,因为它可能使用linux。但是我不能在我的本地开发它,因为它会抛出一个致命的错误……有没有其他的内置函数来解决这个问题?或者你有什么代码片段想分享给我吗?

<?php echo money_format('%n', $_SESSION["shoppingbag"]->getSubTotal()); ?>

试试这个(source)

<?php 
/* 
That it is an implementation of the function money_format for the 
platforms that do not it bear.  
The function accepts to same string of format accepts for the 
original function of the PHP.  
(Sorry. my writing in English is very bad)  
The function is tested using PHP 5.1.4 in Windows XP 
and Apache WebServer. 
*/ 
function money_format($format, $number) 
{ 
    $regex  = '/%((?:['^!'-]|'+|'(|'=.)*)([0-9]+)?'. 
              '(?:#([0-9]+))?(?:'.([0-9]+))?([in%])/'; 
    if (setlocale(LC_MONETARY, 0) == 'C') { 
        setlocale(LC_MONETARY, ''); 
    } 
    $locale = localeconv(); 
    preg_match_all($regex, $format, $matches, PREG_SET_ORDER); 
    foreach ($matches as $fmatch) { 
        $value = floatval($number); 
        $flags = array( 
            'fillchar'  => preg_match('/'=(.)/', $fmatch[1], $match) ? 
                           $match[1] : ' ', 
            'nogroup'   => preg_match('/'^/', $fmatch[1]) > 0, 
            'usesignal' => preg_match('/'+|'(/', $fmatch[1], $match) ? 
                           $match[0] : '+', 
            'nosimbol'  => preg_match('/'!/', $fmatch[1]) > 0, 
            'isleft'    => preg_match('/'-/', $fmatch[1]) > 0 
        ); 
        $width      = trim($fmatch[2]) ? (int)$fmatch[2] : 0; 
        $left       = trim($fmatch[3]) ? (int)$fmatch[3] : 0; 
        $right      = trim($fmatch[4]) ? (int)$fmatch[4] : $locale['int_frac_digits']; 
        $conversion = $fmatch[5]; 
        $positive = true; 
        if ($value < 0) { 
            $positive = false; 
            $value  *= -1; 
        } 
        $letter = $positive ? 'p' : 'n'; 
        $prefix = $suffix = $cprefix = $csuffix = $signal = ''; 
        $signal = $positive ? $locale['positive_sign'] : $locale['negative_sign']; 
        switch (true) { 
            case $locale["{$letter}_sign_posn"] == 1 && $flags['usesignal'] == '+': 
                $prefix = $signal; 
                break; 
            case $locale["{$letter}_sign_posn"] == 2 && $flags['usesignal'] == '+': 
                $suffix = $signal; 
                break; 
            case $locale["{$letter}_sign_posn"] == 3 && $flags['usesignal'] == '+': 
                $cprefix = $signal; 
                break; 
            case $locale["{$letter}_sign_posn"] == 4 && $flags['usesignal'] == '+': 
                $csuffix = $signal; 
                break; 
            case $flags['usesignal'] == '(': 
            case $locale["{$letter}_sign_posn"] == 0: 
                $prefix = '('; 
                $suffix = ')'; 
                break; 
        } 
        if (!$flags['nosimbol']) { 
            $currency = $cprefix . 
                        ($conversion == 'i' ? $locale['int_curr_symbol'] : $locale['currency_symbol']) . 
                        $csuffix; 
        } else { 
            $currency = ''; 
        } 
        $space  = $locale["{$letter}_sep_by_space"] ? ' ' : ''; 
        $value = number_format($value, $right, $locale['mon_decimal_point'], 
                 $flags['nogroup'] ? '' : $locale['mon_thousands_sep']); 
        $value = @explode($locale['mon_decimal_point'], $value); 
        $n = strlen($prefix) + strlen($currency) + strlen($value[0]); 
        if ($left > 0 && $left > $n) { 
            $value[0] = str_repeat($flags['fillchar'], $left - $n) . $value[0]; 
        } 
        $value = implode($locale['mon_decimal_point'], $value); 
        if ($locale["{$letter}_cs_precedes"]) { 
            $value = $prefix . $currency . $space . $value . $suffix; 
        } else { 
            $value = $prefix . $value . $space . $currency . $suffix; 
        } 
        if ($width > 0) { 
            $value = str_pad($value, $width, $flags['fillchar'], $flags['isleft'] ? 
                     STR_PAD_RIGHT : STR_PAD_LEFT); 
        } 
        $format = str_replace($fmatch[0], $value, $format); 
    } 
    return $format; 
} 
?>

最接近的是number_format

如果你需要它只是为了能够在windows上开发,你可以简单地做:

<?php
if(!function_exists('money_format') {
  include('Dani''s answer.php');
} 
echo money_format('%n', $_SESSION["shoppingbag"]->getSubTotal()); ?>
相关文章: