# collection格式化計算數據計算github事件得分總和
首先,通過 https://api.github.com/users/YOUR_USRE_NAME/events 獲取到個人事件json。
假如:一個 `PushEvent`計 5 分,一個 `CreateEvent` 計 4 分,一個`IssueCommentEvent`計 3 分,一個 `IssueCommentEvent`計 2 分,除此之外的其它類型的事件計 1 分,計算當前用戶的時間得分總和。
## 聲明兩個變量,并使用foreach解決問題
```
$events = json_decode(file_get_contents('https://api.github.com/users/YOUR_USRE_NAME/events'), true);
$eventTypes = []; // 事件類型
$score = 0; // 總得分
foreach ($events as $event) {
$eventTypes[] = $event['type'];
}
foreach($eventTypes as $eventType) {
switch ($eventType) {
case 'PushEvent':
$score += 5;
break;
case 'CreateEvent':
$score += 4;
break;
case 'IssueEvent':
$score += 3;
break;
case 'IssueCommentEvent':
$score += 2;
break;
default:
$score += 1;
break;
}
}
```
## 使用collection中的[pluck](/collections/pluck.md)、[map](/collections/map.md)和[sum](/collections/sum.md)方法
```
$events = collect(json_decode(file_get_contents('https://api.github.com/users/YOUR_USRE_NAME/events'), true));
$score = $events->pluck('type')->map(function($eventType) {
switch ($eventType) {
case 'PushEvent':
return 5;
break;
case 'CreateEvent':
return 4;
break;
case 'IssueEvent':
return 3;
break;
case 'IssueCommentEvent':
return 2;
break;
default:
return 1;
break;
}
})->sum();
```
## 使用collection中的pluck、map和get方法
```
$events = collect(json_decode(file_get_contents('https://api.github.com/users/YOUR_USRE_NAME/events'), true));
$score = $events->pluck('type')->map(function($eventType) {
return collect([
'PushEvent'=> 5,
'CreateEvent'=> 4,
'IssueEvent'=> 3,
'IssueCommentEvent'=> 2
])->get($eventType, 1); // 如果不存在則默認等于1
})->sum();
```
## 封裝githubScore類
```
$events = collect(json_decode(file_get_contents('https://api.github.com/users/YOUR_USRE_NAME/events'), true));
class GithubScore {
private $events;
private function __construct($events){
$this->events = $events;
}
public static function score($events) {
return (new static($events))->scoreEvents();
}
private function scoreEvents() {
return $this->events->pluck('type')->map(function($eventType){
return $this->lookupEventScore($eventType, 1);
})->sum();
}
public function lookupEventScore($eventType, $default_value) {
return collect([
'PushEvent'=> 5,
'CreateEvent'=> 4,
'IssueEvent'=> 3,
'IssueCommentEvent'=> 2
])->get($eventType, $default_value); // 如果不存在則默認等于1
}
}
dd(GithubScore::score($events));
```
- 介紹
- Laravel5發送郵件使用Service隔離業務
- 如何使用Repository模式
- 如何使用Service模式
- 如何使用Presenter模式
- Laravel 5.* 執行遷移文件報錯:Specified key was too long error
- EloquentORM關聯關系
- EloquentORM關聯關系之一對一
- EloquentORM關聯關系之一對多
- EloquentORM關聯關系之遠層一對多
- EloquentORM關聯關系之多對多
- EloquentORM關聯關系之多態關聯
- EloquentORM關聯關系之多對多多態關聯
- Laravel測試
- Laravel中涉及認證跳轉地址的修改的地方
- Laravel中Collection的基本使用
- all
- avg
- chuck
- collapse
- combine
- contains
- containsStrict
- count
- diff
- diffAssoc
- diffKeys
- each
- every
- except
- filter
- first
- flatMap
- flatten
- flip
- forget
- forPage
- get
- groupBy
- has
- implode
- intersect
- intersectKey
- isEmpty
- isNotEmpty
- keyBy
- keys
- last
- map
- mapWithKeys
- max
- median
- merge
- min
- mode
- nth
- only
- partition
- pipe
- pluck
- pop
- prepend
- pull
- push
- put
- random
- reduce
- reject
- reverse
- search
- shift
- shuffle
- slice
- sort
- sortBy
- sortByDesc
- splice
- split
- sum
- take
- tap
- times
- toArray
- toJson
- transform
- union
- unique
- uniqueStrict
- values
- when
- where
- whereStrict
- whereIn
- whereInStrict
- whereNotIn
- whereNotInStrict
- zip
- Laravel中Collection的實際使用
- collection中sum求和
- collection格式化計算數據
- collection格式化計算數據計算github事件得分總和
- collection格式化markdown數據列表
- collection格式化計算兩個數組的數據
- collection中reduce創建lookup數組
- TODO