Completed
Push — master ( 1ea133...692929 )
by recca
07:00
created

Chinese   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 79
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 0

Test Coverage

Coverage 97.06%

Importance

Changes 0
Metric Value
wmc 8
lcom 1
cbo 0
dl 0
loc 79
ccs 33
cts 34
cp 0.9706
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
C toNumber() 0 41 7
1
<?php
2
3
namespace Recca0120\Lodash\JString\Extensions;
4
5
class Chinese
6
{
7
    /**
8
     * $numberUnits.
9
     *
10
     * @var array
11
     */
12
    public static $numberUnits = [
13
        '個' => 1,
14
        '十' => 10,
15
        '百' => 100,
16
        '千' => 1000,
17
        '萬' => 10000,
18
    ];
19
20
    /**
21
     * $subject.
22
     *
23
     * @var string
24
     */
25
    protected $subject;
26
27
    /**
28
     * __construct.
29
     *
30
     * @param string $subject
31
     */
32 7
    public function __construct($subject)
33
    {
34 7
        $this->subject = $subject;
35 7
    }
36
37
    /**
38
     * toNumber.
39
     *
40
     * @return string
41
     */
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