Dieser Hinweis wird verwendet, um die tatsächlichen Anwendungsszenarien der Collection in Laravel zu organisieren.
Summieren
Anforderungen: Durchlaufen Sie das $orders-Array und ermitteln Sie die Summe der Preise.
<?php // 引入package require __DIR__ . '/vendor/autoload.php'; $orders = [[ 'id' => 1, 'user_id' => 1, 'number' => '13908080808', 'status' => 0, 'fee' => 10, 'discount' => 44, 'order_products'=> [ ['order_id'=>1,'product_id'=>1,'param'=>'6寸','price'=>555.00,'product'=>['id'=>1,'name'=>'蛋糕名称','images'=>[]]], ['order_id'=>1,'product_id'=>1,'param'=>'7寸','price'=>333.00,'product'=>['id'=>1,'name'=>'蛋糕名称','images'=>[]]], ], ]];
$sum = 0; foreach ($orders as $order) { foreach ($order['order_products'] as $item) { $sum += $item['price']; } } echo $sum;
$sum = collect($orders)->map(function($order){ return $order['order_products']; })->flatten(1)->map(function($order){ return $order['price']; })->sum(); echo $sum;
map: Durchlaufen Sie die Sammlung und geben Sie eine neue Sammlung zurück.
flatten: Konvertieren Sie ein mehrdimensionales Array in eine Dimension.
Summe: Gibt die Summe des Arrays zurück.
$sum = collect($orders)->flatMap(function($order){ return $order['order_products']; })->pluck('price')->sum(); echo $sum;
flatMap: Ähnlich wie map
, aber der Unterschied besteht darin, dass flatMap
die zurückgegebene neue Sammlung direkt verwenden kann . map
类似,不过区别在于flatMap
可以直接使用返回的新集合。
$sum = collect($orders)->flatMap(function($order){ return $order['order_products']; })->sum('price');
sum:可以接收一个列名作为参数进行求和。
格式化数据
需求:将如下结构的数组,格式化成下面的新数组。
// 带格式化数组 $gates = [ 'BaiYun_A_A17', 'BeiJing_J7', 'ShuangLiu_K203', 'HongQiao_A157', 'A2', 'BaiYun_B_B230' ]; // 新数组 $boards = [ 'A17', 'J7', 'K203', 'A157', 'A2', 'B230' ];
$res = []; foreach($gates as $key => $gate) { if(strpos($gate, '_') === false) { $res[$key] = $gate; }else{ $offset = strrpos($gate, '_') + 1; $res[$key] = mb_substr($gate , $offset); } } var_dump($res);
$res = collect($gates)->map(function($gate) { $parts = explode('_', $gate); return end($parts); });
$res = collect($gates)->map(function($gate) { return collect(explode('_', $gate))->last(); })->toArray();
explode:将字符串进行分割成数组
last:获取最后一个元素
统计GitHub Event
首先,通过此链接获取到个人事件json。
一个 PushEvent计
5 分,一个 CreateEvent
计 4 分,一个 IssueCommentEvent计
3 分,一个 IssueCommentEvent
4. Verwenden Sie die FlatMap und die Summe der Sammlung:
$opts = [ 'http' => [ 'method' => 'GET', 'header' => [ 'User-Agent: PHP' ] ] ]; $context = stream_context_create($opts); $events = json_decode(file_get_contents('http://api.github.com/users/0xAiKang/events', false, $context), true);
Formatieren von Daten
Anforderungen: Formatieren Sie das Array mit der folgenden Struktur in das neue Array unten.explode: Teilen Sie die Zeichenfolge in ein Array auf1. Verwenden Sie foreach zum Durchqueren:$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; } }Nach dem Login kopieren2. Verwenden Sie die Karte „explodieren“, „letzte“ und „toArray“ der Sammlung:$score = $events->pluck('type')->map(function($eventType) { switch ($eventType) { case 'PushEvent': return 5; case 'CreateEvent': return 4; case 'IssueEvent': return 3; case 'IssueCommentEvent': return 2; default: return 1; } })->sum();Nach dem Login kopieren$score = $events->pluck('type')->map(function($eventType) { return collect([ 'PushEvent'=> 5, 'CreateEvent'=> 4, 'IssueEvent'=> 3, 'IssueCommentEvent'=> 2 ])->get($eventType, 1); // 如果不存在则默认等于1 })->sum();Nach dem Login kopieren
last: Holen Sie sich das letzte An-Element
statistics GitHub EventZuerst holen Sie sich über diesen Link den persönlichen Event-JSON.
Ein PushEvent
ist 5 Punkte wert, ein CreateEvent
ist 4 Punkte wert, ein IssueCommentEvent
ist 3 Punkte wert, ein IssueCommentEvent Es ist 2 Punkte wert, andere Arten von Ereignissen sind 1 Punkt wert und die Gesamtzeitpunktzahl des aktuellen Benutzers wird berechnet. <strong><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">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
}
}
var_dump(GithubScore::score($events));</pre><div class="contentsignin">Nach dem Login kopieren</div></div>1. Traditionelle foreach-Methode: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">$messages = [
'Should be working now for all Providers.',
'If you see one where spaces are in the title let me know.',
'But there should not have blank in the key of config or .env file.'
];
// 格式化之后的结果
- Should be working now for all Providers. \n
- If you see one where spaces are in the title let me know. \n
- But there should not have blank in the key of config or .env file.</pre><div class="contentsignin">Nach dem Login kopieren</div></div>2. Verwenden Sie die Karten-, Zupf- und Summenmethoden der Menge: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">$comment = '- ' . array_shift($messages);
foreach ($messages as $message) {
$comment .= "\n - ${message}";
}
var_dump($comment);</pre><div class="contentsignin">Nach dem Login kopieren</div></div></strong>Die Verwendung der Kettenprogrammierung der Menge kann die oben genannten Mehrfachdurchlaufprobleme gut lösen.
$comment = collect($messages)->map(function($message){ return '- ' . $message; })->implode("\n"); var_dump($comment);
$lastYear = [ 6345.75, 9839.45, 7134.60, 9479.50, 9928.0, 8652.00, 7658.40, 10245.40, 7889.40, 3892.40, 3638.40, 2339.40 ]; $thisYear = [ 6145.75, 6895.00, 3434.00, 9349350, 9478.60, 7652.80, 4758.40, 10945.40, 3689.40, 8992.40, 7588.40, 2239.40 ];