| 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 |