Conditions | 7 |
Paths | 10 |
Total Lines | 41 |
Code Lines | 28 |
Lines | 0 |
Ratio | 0 % |
Tests | 30 |
CRAP Score | 7.0016 |
Changes | 0 |
1 | <?php |
||
42 | 7 | public function toNumber() |
|
43 | { |
||
44 | 7 | $sum = 0; |
|
45 | 7 | $matches = []; |
|
46 | 7 | if ((bool) preg_match_all('/(?P<number>[一二三四五六七八九]+)?(?P<unit>[萬千百十])?/u', $this->subject, $matches, PREG_SET_ORDER) === false) { |
|
47 | return $sum; |
||
48 | } |
||
49 | |||
50 | 7 | $sum = 0; |
|
51 | 7 | foreach ((array) $matches as $token) { |
|
52 | 7 | $unit = empty($token['unit']) === false ? $token['unit'] : '個'; |
|
53 | 7 | $unit = static::$numberUnits[$unit]; |
|
54 | 7 | if (empty($token['number']) === true) { |
|
55 | 7 | $sum = ($sum === 0 ? 1 : $sum) * $unit; |
|
56 | |||
57 | 7 | continue; |
|
58 | } |
||
59 | |||
60 | 7 | $number = $token['number']; |
|
61 | 7 | $number = strtr($number, [ |
|
62 | 7 | '零' => 0, |
|
63 | 7 | '一' => 1, |
|
64 | 7 | '二' => 2, |
|
65 | 7 | '三' => 3, |
|
66 | 7 | '四' => 4, |
|
67 | 7 | '五' => 5, |
|
68 | 7 | '六' => 6, |
|
69 | 7 | '七' => 7, |
|
70 | 7 | '八' => 8, |
|
71 | 7 | '九' => 9, |
|
72 | 7 | ]); |
|
73 | |||
74 | 7 | if ($unit >= 10000) { |
|
75 | 2 | $sum = $sum * $unit; |
|
76 | 2 | } |
|
77 | |||
78 | 7 | $sum += ($number * $unit); |
|
79 | 7 | } |
|
80 | |||
81 | 7 | return $sum; |
|
82 | } |
||
83 | } |
||
84 |