1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10:
11:
12: namespace Rundiz\Number;
13:
14: 15: 16: 17: 18:
19: class Number
20: {
21:
22:
23: 24: 25: 26: 27: 28:
29: protected $byte_units = array(
30: 'B' => 1,
31: 'KiB' => 1024,
32: 'KB' => 1000,
33: 'MiB' => 1048576,
34: 'MB' => 1000000,
35: 'GiB' => 1073741824,
36: 'GB' => 1000000000,
37: 'TiB' => 1099511627776,
38: 'TB' => 1000000000000,
39: 'PiB' => 1125899906842624,
40: 'PB' => 1000000000000000,
41: 'EiB' => 1152921504606846976,
42: 'EB' => 1000000000000000000,
43: 'ZiB' => 1180591620717411303424,
44: 'ZB' => 1000000000000000000000,
45: 'YiB' => 1208925819614629174706176,
46: 'YB' => 1000000000000000000000000,
47: );
48:
49:
50: 51: 52: 53: 54: 55: 56: 57:
58: public function convertBaht($num, $display_net = true, $language = 'Thai')
59: {
60: $number_lang_class_name = 'Rundiz\\Number\\Number'.$language;
61:
62: if (class_exists($number_lang_class_name)) {
63: $numlang = new $number_lang_class_name();
64:
65: if (method_exists($numlang, 'convertBaht')) {
66: $output = $numlang->convertBaht($num, $display_net);
67: } else {
68: $output = $numlang->convertNumber($num);
69: if ($language == 'Eng') {
70: $output .= ' Baht';
71: }
72: }
73:
74: unset($number_lang_class_name, $numlang);
75: return $output;
76: }
77:
78: unset($number_lang_class_name);
79: }
80:
81:
82: 83: 84: 85: 86: 87: 88:
89: public function convertNumber($num, $language = 'Thai')
90: {
91: $number_lang_class_name = 'Rundiz\\Number\\Number'.$language;
92:
93: if (class_exists($number_lang_class_name)) {
94: $numlang = new $number_lang_class_name();
95: $output = $numlang->convertNumber($num);
96: unset($number_lang_class_name, $numlang);
97: return $output;
98: }
99:
100: unset($number_lang_class_name);
101: }
102:
103:
104: 105: 106: 107: 108: 109: 110: 111:
112: public function fromBytes($size, $unit = 'AUTO', $decimal = 2)
113: {
114: if (!is_numeric($size)) {
115: return false;
116: }
117: $size = (string) $size;
118:
119: if ($unit == null) {
120: $unit = 'AUTO';
121: }
122:
123: $decimal = intval($decimal);
124: $output = false;
125:
126: if ($unit != 'AUTO') {
127: if (array_key_exists($unit, $this->byte_units)) {
128: $size_unit_conversion = (string) $this->byte_units[$unit];
129: } else {
130: $unit = 'B';
131: $size_unit_conversion = (string) 1;
132: }
133:
134: $output = bcdiv($size, $size_unit_conversion, $decimal).' '.$unit;
135: } else {
136: $byte_units = array_reverse($this->byte_units);
137: foreach ($byte_units as $size_unit => $size_unit_conversion) {
138: $size_unit_conversion = (string) $size_unit_conversion;
139: if ($size >= $size_unit_conversion && $unit == 'AUTO') {
140: $output = bcdiv($size, $size_unit_conversion, $decimal).' '.$size_unit;
141: break;
142: }
143: }
144: }
145:
146: unset($byte_units, $size_unit, $size_unit_conversion);
147: return $output;
148: }
149:
150:
151: 152: 153: 154: 155: 156:
157: public function toBytes($size)
158: {
159: $pattern = '/^([0-9]+(?:\.[0-9]+)?)('.implode('|', array_keys($this->byte_units)).')?$/Di';
160:
161: if (!preg_match($pattern, trim($size), $matches)) {
162:
163: return false;
164: }
165: unset($pattern);
166:
167: $size_number = 0;
168: if (isset($matches[1])) {
169: $size_number = $matches[1];
170: } else {
171: return false;
172: }
173:
174: $size_unit = 'B';
175: if (isset($matches[2])) {
176: $size_unit = $matches[2];
177: }
178:
179: $size_unit_conversion = 1;
180: if (array_key_exists($size_unit, $this->byte_units)) {
181: $size_unit_conversion = $this->byte_units[$size_unit];
182: }
183: unset($size_unit);
184:
185: $bytes = $size_number*$size_unit_conversion;
186: unset($size_number, $size_unit_conversion);
187: return $bytes;
188: }
189:
190:
191: }