Heim  >  Artikel  >  PHP-Framework  >  Kennen Sie die tatsächlichen Nutzungsszenarien der Laravel Collection?

Kennen Sie die tatsächlichen Nutzungsszenarien der Laravel Collection?

藏色散人
藏色散人nach vorne
2021-08-26 15:26:512125Durchsuche

Die folgende Tutorial-Kolumne von Laravel stellt Ihnen die tatsächlichen Nutzungsszenarien der Laravel Collection vor. Ich hoffe, dass sie Freunden in Not hilfreich sein wird!

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__ . &#39;/vendor/autoload.php&#39;;

$orders = [[
    &#39;id&#39;            =>      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.

3. Verwenden Sie flatMap, pluck und sum der Sammlung:
$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 可以直接使用返回的新集合。

4.使用集合的flatMap、sum:
$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 分,一个 IssueCommentEvent4. 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.
$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();
explode: Teilen Sie die Zeichenfolge in ein Array auf

last: Holen Sie sich das letzte An-Element

statistics GitHub Event

Zuerst 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-&gt;events = $events;     }     public static function score($events) {         return (new static($events))-&gt;scoreEvents();     }     private function scoreEvents() {         return $this-&gt;events-&gt;pluck('type')-&gt;map(function($eventType){             return $this-&gt;lookupEventScore($eventType, 1);         })-&gt;sum();     }     public function lookupEventScore($eventType, $default_value) {        return collect([            'PushEvent'=&gt; 5,            'CreateEvent'=&gt; 4,            'IssueEvent'=&gt; 3,            'IssueCommentEvent'=&gt; 2        ])-&gt;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 .= &quot;\n -  ${message}&quot;; } var_dump($comment);</pre></strong>Die Verwendung der Kettenprogrammierung der Menge kann die oben genannten Mehrfachdurchlaufprobleme gut lösen.

3. Verwenden Sie die Map-, Pluck- und Get-Methoden in der Sammlung:
$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

Anforderung: Formatieren Sie die folgenden Daten in einer neuen Struktur.
$profit = [];
foreach($thisYear as $key => $monthly){
    $profit[$key] = $monthly - $lastYear[$key];
}
var_dump($profit);
1. Traditionelle foreach-Methode:
$profit = collect($thisYear)->zip($lastYear)->map(function($monthly){
    return $monthly->first() - $monthly->last();
});
2. Verwenden Sie die Karten- und Implosionsmethode des Satzes:
$employees = [
    [
        'name' => 'example',
        'email' => 'example@exmaple.com',
        'company' => 'example Inc.'
    ],
    [
        'name' => 'Lucy',
        'email' => 'lucy@example.com',
        'company' => 'ibm Inc.'
    ],
    [
        'name' => 'Taylor',
        'email' => 'toylor@laravel.com',
        'company'=>'Laravel Inc.'
    ]
];

// 格式化之后的结果
$lookup = [
    'example' => 'example@example.com',
    'Lucy' => ‘lucy@example.com’,
    'Taylor'=> 'toylor@laravel.com'
];

Mehrere Arrays, um die Differenz zu ermitteln. Anforderungen: Zwei Datensätze stellen den Umsatz des letzten Jahres bzw. des Jahres dar. Ermitteln Sie den Gewinn und den Gewinn jedes Monats Verlustsituation.

$emails = [];
foreach ($employees as $key => $value) {
    $emails[$value['name']] = $value['email'];
}
1. Traditionelle foreach-Methode:
$emails = collect($employees)->reduce(function($emailLookup, $employee){
    $emailLookup[$employee['name']] = $employee['email'];
    return $emailLookup;
},[]);
2. Verwenden Sie zip, zuerst und zuletzt in der Sammlung:
$emails = collect($employees)->pluck('name', 'email');
zip: Führen Sie die Werte des angegebenen Arrays mit den Werten der ursprünglichen Sammlung am entsprechenden Index zusammen.
🎜🎜Erstellen Sie ein Sucharray🎜🎜🎜Anforderungen: Formatieren Sie das folgende Array in das folgende Ergebnis: 🎜rrreee1. Traditionelle foreach-Methode: rrreee2. Verwenden Sie die Reduzierungsmethode des Satzes: rrreee🎜reduce: Übergeben Sie das Ergebnis jeder Iteration an next Iterieren Sie, bis die Menge auf einen einzigen Wert reduziert ist. 🎜3. Verwenden Sie die Zupfmethode: rrreee🎜🎜🎜Verwandte Empfehlungen: 🎜Die neuesten fünf Laravel-Video-Tutorials🎜🎜🎜

Das obige ist der detaillierte Inhalt vonKennen Sie die tatsächlichen Nutzungsszenarien der Laravel Collection?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen