Maison > cadre php > Laravel > Savez-vous quels sont les scénarios d'utilisation réels de Laravel Collection ?

Savez-vous quels sont les scénarios d'utilisation réels de Laravel Collection ?

藏色散人
Libérer: 2021-08-27 09:28:40
avant
2284 Les gens l'ont consulté

La colonne tutorielle suivante de Laravel vous présentera les scénarios d'utilisation réels de Laravel Collection. J'espère qu'elle sera utile aux amis dans le besoin !

Cette note est utilisée pour organiser les scénarios d'application réels de Collection dans Laravel.

Summing

Exigences : parcourez le tableau $orders et trouvez la somme des prix.
<?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'=>[]]],
    ],
]];
Copier après la connexion
1. Utilisez la méthode foreach traditionnelle pour parcourir :
$sum = 0;
foreach ($orders as $order) {
    foreach ($order['order_products'] as $item) {
        $sum += $item['price'];
    }
}
echo $sum;
Copier après la connexion
2 Utilisez la carte, l'aplatissement et la somme de la collection :
$sum = collect($orders)->map(function($order){
    return $order['order_products'];
})->flatten(1)->map(function($order){
    return $order['price'];
})->sum();

echo $sum;
Copier après la connexion

map : parcourez la collection et renvoyez une nouvelle collection.
flatten : convertit un tableau multidimensionnel en une seule dimension.
sum : renvoie la somme du tableau.

3. Utilisez le flatMap, le pluck et la somme de la collection :
$sum = collect($orders)->flatMap(function($order){
    return $order['order_products'];
})->pluck('price')->sum();
echo $sum;
Copier après la connexion

flatMap : similaire à map, mais la différence est que flatMap peut utiliser directement la nouvelle collection renvoyée. . map 类似,不过区别在于flatMap 可以直接使用返回的新集合。

4.使用集合的flatMap、sum:
$sum = collect($orders)->flatMap(function($order){
    return $order['order_products'];
})->sum('price');
Copier après la connexion

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

格式化数据

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

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

explode:将字符串进行分割成数组
last:获取最后一个元素

统计GitHub Event

首先,通过此链接获取到个人事件json。

一个 PushEvent计 5 分,一个 CreateEvent 计 4 分,一个 IssueCommentEvent计 3 分,一个 IssueCommentEvent4. Utilisez le flatMap et la somme de la collection :

$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);
Copier après la connexion
sum : peut recevoir un nom de colonne comme paramètre pour la sommation.

Formatage des données

Exigences : Formatez le tableau avec la structure suivante dans le nouveau tableau ci-dessous.
$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;
    }
}
Copier après la connexion
1. Utilisez foreach pour parcourir :
$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();
Copier après la connexion
2 Utilisez la carte de la collection et l'éclatement et la fin de php :
$score = $events->pluck('type')->map(function($eventType) {
   return collect([
       'PushEvent'=> 5,
       'CreateEvent'=> 4,
       'IssueEvent'=> 3,
       'IssueCommentEvent'=> 2
   ])->get($eventType, 1); // 如果不存在则默认等于1
})->sum();
Copier après la connexion
3 Utilisez la carte, éclater, dernier et toArray de la collection :
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));
Copier après la connexion
explode : Divisez la chaîne en un tableau.

last : obtenez le dernier élément An

statistiques de l'événement GitHub

Tout d'abord, obtenez le json de l'événement personnel via ce lien.

Un PushEvent vaut 5 points, un CreateEvent vaut 4 points, un IssueCommentEvent vaut 3 points, un IssueCommentEvent Cela vaut 2 points, les autres types d'événements valent 1 point et le score de temps total de l'utilisateur actuel est calculé. <strong><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">Copier après la connexion</div></div>1. Méthode foreach traditionnelle : <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">Copier après la connexion</div></div>2. Utilisez les méthodes map, pluck et sum de l'ensemble : <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">$comment = collect($messages)-&gt;map(function($message){     return '- ' . $message; })-&gt;implode(&quot;\n&quot;); var_dump($comment);</pre><div class="contentsignin">Copier après la connexion</div></div></strong>L'utilisation de la programmation en chaîne de l'ensemble peut bien résoudre les multiples problèmes de traversée ci-dessus.

3. Utilisez les méthodes map, pluck et get de la collection :
$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
];
Copier après la connexion
4 Essayez d'encapsuler cette exigence dans une classe :
$profit = [];
foreach($thisYear as $key => $monthly){
    $profit[$key] = $monthly - $lastYear[$key];
}
var_dump($profit);
Copier après la connexion
Formater les données

Exigence : formatez les données suivantes dans une nouvelle structure.
$profit = collect($thisYear)->zip($lastYear)->map(function($monthly){
    return $monthly->first() - $monthly->last();
});
Copier après la connexion
1. Méthode foreach traditionnelle :
$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'
];
Copier après la connexion
2. Utilisez la méthode de cartographie et d'implosion de l'ensemble :
$emails = [];
foreach ($employees as $key => $value) {
    $emails[$value['name']] = $value['email'];
}
Copier après la connexion

Plusieurs tableaux pour trouver la différence

Exigences : Deux ensembles de données représentent respectivement les revenus de l'année dernière et les revenus de cette année. situation de perte. 🎜
$emails = collect($employees)->reduce(function($emailLookup, $employee){
    $emailLookup[$employee['name']] = $employee['email'];
    return $emailLookup;
},[]);
Copier après la connexion
1. Méthode foreach traditionnelle :
$emails = collect($employees)->pluck('name', 'email');
Copier après la connexion
2. Utilisez zip, premier, dernier de la collection : rrreee🎜zip : Fusionnez les valeurs du tableau donné avec les valeurs de la collection d'origine à l'index correspondant. 🎜🎜🎜Créez un tableau de recherche🎜🎜🎜Exigences : Formatez le tableau suivant dans le résultat suivant : 🎜rrreee1 Méthode foreach traditionnelle : rrreee2 Utilisez la méthode de réduction de l'ensemble : rrreee🎜reduce : Transmettez le résultat de chaque itération au. next Répétez jusqu'à ce que l'ensemble soit réduit à une seule valeur. 🎜3. Utilisez la méthode de collecte par pincement : rrreee🎜🎜🎜Recommandations associées : 🎜Les cinq derniers didacticiels vidéo Laravel🎜🎜🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal