You are here

private static function PHPExcel_Style_NumberFormat::_complexNumberFormatMask in Loft Data Grids 7.2

Same name and namespace in other branches
  1. 6.2 vendor/phpoffice/phpexcel/Classes/PHPExcel/Style/NumberFormat.php \PHPExcel_Style_NumberFormat::_complexNumberFormatMask()
1 call to PHPExcel_Style_NumberFormat::_complexNumberFormatMask()
PHPExcel_Style_NumberFormat::toFormattedString in vendor/phpoffice/phpexcel/Classes/PHPExcel/Style/NumberFormat.php
* Convert a value in a pre-defined format to a PHP string * *

File

vendor/phpoffice/phpexcel/Classes/PHPExcel/Style/NumberFormat.php, line 501

Class

PHPExcel_Style_NumberFormat
PHPExcel_Style_NumberFormat

Code

private static function _complexNumberFormatMask($number, $mask, $level = 0) {
  $sign = $number < 0.0;
  $number = abs($number);
  if (strpos($mask, '.') !== false) {
    $numbers = explode('.', $number . '.0');
    $masks = explode('.', $mask . '.0');
    $result1 = self::_complexNumberFormatMask($numbers[0], $masks[0], 1);
    $result2 = strrev(self::_complexNumberFormatMask(strrev($numbers[1]), strrev($masks[1]), 1));
    return ($sign ? '-' : '') . $result1 . '.' . $result2;
  }
  $r = preg_match_all('/0+/', $mask, $result, PREG_OFFSET_CAPTURE);
  if ($r > 1) {
    $result = array_reverse($result[0]);
    foreach ($result as $block) {
      $divisor = 1 . $block[0];
      $size = strlen($block[0]);
      $offset = $block[1];
      $blockValue = sprintf('%0' . $size . 'd', fmod($number, $divisor));
      $number = floor($number / $divisor);
      $mask = substr_replace($mask, $blockValue, $offset, $size);
    }
    if ($number > 0) {
      $mask = substr_replace($mask, $number, $offset, 0);
    }
    $result = $mask;
  }
  else {
    $result = $number;
  }
  return ($sign ? '-' : '') . $result;
}