Team   A
last analyzed

Complexity

Total Complexity 18

Size/Duplication

Total Lines 140
Duplicated Lines 15.71 %

Coupling/Cohesion

Components 1
Dependencies 3

Importance

Changes 15
Bugs 1 Features 5
Metric Value
wmc 18
c 15
b 1
f 5
lcom 1
cbo 3
dl 22
loc 140
rs 10

7 Methods

Rating   Name   Duplication   Size   Complexity  
A toArray() 0 13 2
A getAvgSkill() 11 11 2
A getAvgAge() 11 11 2
A getPlayersForRole() 0 10 3
A getBestPlayerForRole() 0 19 4
A playersPerRoleArray() 0 8 3
A fromArray() 0 17 2

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
<?php
2
3
namespace App\Lib\DsManager\Models;
4
5
use App\Lib\DsManager\Models\Common\DsManagerModel;
6
7
/**
8
 * Class Team
9
 * @package App\Lib\DsManager\Models
10
 */
11
class Team extends DsManagerModel
12
{
13
	/**
14
	 * @var
15
	 */
16
	public $name;
17
	/**
18
	 * @var
19
	 */
20
	public $coach;
21
	/**
22
	 * @var
23
	 */
24
	public $roster;
25
26
	/**
27
	 * @var
28
	 */
29
	public $nationality;
30
31
	/**
32
	 * @return array
33
	 */
34
	public function toArray()
35
	{
36
		$result = [];
37
		$result['name'] = $this->name;
38
		$result['nationality'] = $this->nationality;
39
		$result['coach'] = $this->coach->toArray();
40
		$roster = [];
41
		foreach ($this->roster as $player) {
42
			$roster[] = $player->toArray();
43
		}
44
		$result['roster'] = $roster;
45
		return $result;
46
	}
47
48
	/**
49
	 * @return string
50
	 */
51 View Code Duplication
	public function getAvgSkill()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
52
	{
53
		$c = 0;
54
		$tot = 0;
55
		foreach ($this->roster as $player) {
56
			$tot += $player->skillAvg;
57
			$c++;
58
		}
59
60
		return bcdiv($tot, $c, 2);
61
	}
62
63
	/**
64
	 * @return string
65
	 */
66 View Code Duplication
	public function getAvgAge()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
67
	{
68
		$c = 0;
69
		$tot = 0;
70
		foreach ($this->roster as $player) {
71
			$tot += $player->age;
72
			$c++;
73
		}
74
75
		return bcdiv($tot, $c, 2);
76
	}
77
78
	/**
79
	 * @param $role
80
	 * @return array
81
	 */
82
	public function getPlayersForRole($role)
83
	{
84
		$result = [];
85
		foreach ($this->roster as $player) {
86
			if ($player->role == $role) {
87
				$result[] = $player;
88
			}
89
		}
90
		return $result;
91
	}
92
93
	/**
94
	 * @param $role
95
	 * @return null
96
	 */
97
	public function getBestPlayerForRole($role)
98
	{
99
		$players = $this->getPlayersForRole($role);
100
		$maxSkill = 0;
101
		$index = -1;
102
		$i = 0;
103
		foreach ($players as $player) {
104
			if ($player->skillAvg > $maxSkill) {
105
				$index = $i;
106
				$maxSkill = $player->skillAvg;
107
			}
108
			$i++;
109
		}
110
111
		if ($index === -1) {
112
			return null;
113
		}
114
		return $players[$index];
115
	}
116
117
	/**
118
	 * @return array
119
	 */
120
	public function playersPerRoleArray()
121
	{
122
		$result = [];
123
		foreach ($this->roster as $player) {
124
			$result[$player->role] = isset($result[$player->role]) ? $result[$player->role] + 1 : 1;
125
		}
126
		return $result;
127
	}
128
129
	/**
130
	 * @param array $array
131
	 * @return mixed
132
	 */
133
	public static function fromArray($array = [])
134
	{
135
		$roster = $array['roster'];
136
		$coach = $array['coach'];
137
		unset($array['roster']);
138
		unset($array['coach']);
139
140
		$team = parent::fromArray($array);
141
142
		$team->coach = Coach::fromArray($coach);
143
		$players = [];
144
		foreach ($roster as $roasterP) {
145
			$players[] = Player::fromArray($roasterP);
146
		}
147
		$team->roster = $players;
148
		return $team;
149
	}
150
}