Heim > PHP-Framework > Laravel > Hauptteil

Kennen Sie die tatsächlichen Nutzungsszenarien der Laravel Collection?

藏色散人
Freigeben: 2021-08-27 09:28:40
nach vorne
2237 Leute haben es durchsucht

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'=>[]]],
    ],
]];
Nach dem Login kopieren
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;
Nach dem Login kopieren
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;
Nach dem Login kopieren

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;
Nach dem Login kopieren

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');
Nach dem Login kopieren

sum:可以接收一个列名作为参数进行求和。

格式化数据

需求:将如下结构的数组,格式化成下面的新数组。
// 带格式化数组
$gates = [
    'BaiYun_A_A17',
    'BeiJing_J7',
    'ShuangLiu_K203',
    'HongQiao_A157',
    'A2',
    'BaiYun_B_B230'
];

// 新数组
$boards = [
    'A17',
    'J7',
    'K203',
    'A157',
    'A2',
    'B230'
];
Nach dem Login kopieren
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);
Nach dem Login kopieren
2.使用集合的map以及php 的explode、end:
$res = collect($gates)->map(function($gate) {
    $parts = explode('_', $gate);
    return end($parts);
});
Nach dem Login kopieren
3.使用集合的map、explode、last、toArray:
$res = collect($gates)->map(function($gate) {
    return collect(explode('_', $gate))->last();
})->toArray();
Nach dem Login kopieren

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);
Nach dem Login kopieren
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;
    }
}
Nach dem Login kopieren
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();
Nach dem Login kopieren
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();
Nach dem Login kopieren
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><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-&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><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 .= &quot;\n -  ${message}&quot;; } 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.

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);
Nach dem Login kopieren
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
];
Nach dem Login kopieren
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);
Nach dem Login kopieren
1. Traditionelle foreach-Methode:
$profit = collect($thisYear)->zip($lastYear)->map(function($monthly){
    return $monthly->first() - $monthly->last();
});
Nach dem Login kopieren
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'
];
Nach dem Login kopieren

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'];
}
Nach dem Login kopieren
1. Traditionelle foreach-Methode:
$emails = collect($employees)->reduce(function($emailLookup, $employee){
    $emailLookup[$employee['name']] = $employee['email'];
    return $emailLookup;
},[]);
Nach dem Login kopieren
2. Verwenden Sie zip, zuerst und zuletzt in der Sammlung:
$emails = collect($employees)->pluck('name', 'email');
Nach dem Login kopieren
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!

Verwandte Etiketten:
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage