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'=>[]]], ], ]];1. Verwenden Sie die traditionelle foreach-Methode zum Durchlaufen:
$sum = 0; foreach ($orders as $order) { foreach ($order['order_products'] as $item) { $sum += $item['price']; } } echo $sum;2 Verwenden Sie Map, Flatten und Summe der Sammlung:
$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' ];1.使用foreach 进行遍历:
$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);2.使用集合的map以及php 的explode、end:
$res = collect($gates)->map(function($gate) { $parts = explode('_', $gate); return end($parts); });3.使用集合的map、explode、last、toArray:
$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);sum: kann einen Spaltennamen als Parameter für die Summierung erhalten.
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 auf$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; } }1. Verwenden Sie foreach zum Durchqueren:$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();2. Verwenden Sie die Karte „explodieren“, „letzte“ und „toArray“ der Sammlung:$score = $events->pluck('type')->map(function($eventType) { return collect([ 'PushEvent'=> 5, 'CreateEvent'=> 4, 'IssueEvent'=> 3, 'IssueCommentEvent'=> 2 ])->get($eventType, 1); // 如果不存在则默认等于1 })->sum();
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><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>1. Traditionelle foreach-Methode: <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>2. Verwenden Sie die Karten-, Zupf- und Summenmethoden der Menge: <pre class="brush:php;toolbar:false">$comment = '- ' . array_shift($messages);
foreach ($messages as $message) {
$comment .= "\n - ${message}";
}
var_dump($comment);</pre></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);4. Versuchen Sie, diese Anforderung in eine Klasse zu kapseln:
$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 ];Daten formatieren