2011-08-11 9 views
0

money_format不能在windows上工作,至少從我在手冊中讀到的內容來看..但我得到了這個應用程序,其中它使用money_format(),我猜它在生產服務器上沒有問題,因爲可能它使用的是Linux。但我不能在我的本地因爲它發展它引發致命的錯誤..任何替代內置功能呢?或者你可能想分享給我的任何代碼片段?替代內置函數使用?或者你到達那裏的任何代碼片段?

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

回答

0

最近可以得到的是number_format

如果你需要它,只是爲了能夠在Windows上開發,你可以簡單地做:

<?php 
if(!function_exists('money_format') { 
    include('Dani\'s answer.php'); 
} 
echo money_format('%n', $_SESSION["shoppingbag"]->getSubTotal()); ?> 
+0

是的,我用Google搜索,但還在等待其他開發者的意見;) – sasori

1

試試這個:(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; 
} 

?> 
相關問題