Rumah  >  Artikel  >  rangka kerja php  >  Adakah anda tahu apakah senario penggunaan sebenar Koleksi Laravel?

Adakah anda tahu apakah senario penggunaan sebenar Koleksi Laravel?

藏色散人
藏色散人ke hadapan
2021-08-26 15:26:512247semak imbas

Lajur tutorial Laravel berikut akan memperkenalkan anda kepada senario penggunaan sebenar Koleksi Laravel, saya harap ia dapat membantu rakan yang memerlukan!

Nota ini digunakan untuk mengatur senario aplikasi sebenar Koleksi dalam Laravel.

Jumlah

Keperluan: Rentasi tatasusunan $orders dan cari jumlah harga.
<?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. Gunakan kaedah foreach tradisional untuk melintasi:
$sum = 0;
foreach ($orders as $order) {
    foreach ($order['order_products'] as $item) {
        $sum += $item['price'];
    }
}
echo $sum;
2. Gunakan peta, ratakan dan jumlah koleksi:
$sum = collect($orders)->map(function($order){
    return $order['order_products'];
})->flatten(1)->map(function($order){
    return $order['price'];
})->sum();

echo $sum;

peta: Rentasi koleksi dan kembalikan koleksi baharu.
ratakan: Tukar tatasusunan berbilang dimensi kepada satu dimensi.
jumlah: Mengembalikan jumlah tatasusunan.

3. Gunakan flatMap, cabut dan jumlah koleksi:
$sum = collect($orders)->flatMap(function($order){
    return $order['order_products'];
})->pluck('price')->sum();
echo $sum;

flatMap: serupa dengan map, tetapi perbezaannya ialah flatMap boleh terus menggunakan koleksi baharu yang dikembalikan.

4. Gunakan peta rata dan jumlah koleksi:
$sum = collect($orders)->flatMap(function($order){
    return $order['order_products'];
})->sum('price');

jumlah: Anda boleh menerima nama lajur sebagai parameter untuk penjumlahan.

Data berformat

Keperluan: Format tatasusunan dengan struktur berikut ke dalam tatasusunan baharu di bawah.
// 带格式化数组
$gates = [
    'BaiYun_A_A17',
    'BeiJing_J7',
    'ShuangLiu_K203',
    'HongQiao_A157',
    'A2',
    'BaiYun_B_B230'
];

// 新数组
$boards = [
    'A17',
    'J7',
    'K203',
    'A157',
    'A2',
    'B230'
];
1. Gunakan foreach untuk melintasi:
$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 Gunakan peta koleksi dan letupan dan penghujung PHP:
$res = collect($gates)->map(function($gate) {
    $parts = explode('_', $gate);
    return end($parts);
});
3 Gunakan peta, letup, terakhir, dan toArray koleksi :
$res = collect($gates)->map(function($gate) {
    return collect(explode('_', $gate))->last();
})->toArray();

meletup: Pisahkan rentetan kepada tatasusunan
terakhir: Dapatkan elemen terakhir

Peristiwa GitHub Statistik

Pertama, dapatkan peribadi acara json melalui pautan ini.

A PushEvent计 bernilai 5 mata, CreateEvent bernilai 4 mata, IssueCommentEvent计 bernilai 3 mata, IssueCommentEvent bernilai 2 mata, jenis acara lain bernilai 1 mata , pengiraan Jumlah markah masa pengguna semasa.

$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);
1. Kaedah foreach tradisional:
$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;
    }
}
2 Gunakan kaedah peta, cabut dan jumlah set:
$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();

Menggunakan pengaturcaraan rantaian set boleh menyelesaikan perkara di atas beberapa kali dengan baik. Masalah lintasan.

3. Gunakan peta, cabut dan dapatkan kaedah dalam koleksi:
$score = $events->pluck('type')->map(function($eventType) {
   return collect([
       'PushEvent'=> 5,
       'CreateEvent'=> 4,
       'IssueEvent'=> 3,
       'IssueCommentEvent'=> 2
   ])->get($eventType, 1); // 如果不存在则默认等于1
})->sum();
4 Cuba masukkan keperluan ini ke dalam kelas:
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));

Formatkan data

<.>Keperluan: Formatkan data berikut ke dalam struktur baharu.
1. Kaedah foreach tradisional:
$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.
2. Gunakan kaedah pemetaan dan letupan:
$comment = '- ' . array_shift($messages);
foreach ($messages as $message) {
    $comment .= "\n -  ${message}";
}
var_dump($comment);
$comment = collect($messages)->map(function($message){
    return '- ' . $message;
})->implode("\n");
var_dump($comment);

Perbezaan pelbagai tatasusunan

Keperluan : Dua set data mewakili hasil tahun lepas dan hasil tahun ini masing-masing Cari untung dan rugi bulanan.
1. Kaedah foreach tradisional:
$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
];
2 Gunakan zip, pertama dan terakhir koleksi:
$profit = [];
foreach($thisYear as $key => $monthly){
    $profit[$key] = $monthly - $lastYear[$key];
}
var_dump($profit);
$profit = collect($thisYear)->zip($lastYear)->map(function($monthly){
    return $monthly->first() - $monthly->last();
});
zip: Bandingkan nilai tatasusunan yang diberikan dengan nilai asal koleksi pada indeks yang sepadan digabungkan bersama.

Buat tatasusunan carian

Keperluan: Formatkan tatasusunan berikut ke dalam hasil berikut:
1 Kaedah foreach tradisional:
$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'
];
2 kaedah pengurangan koleksi:
$emails = [];
foreach ($employees as $key => $value) {
    $emails[$value['name']] = $value['email'];
}
$emails = collect($employees)->reduce(function($emailLookup, $employee){
    $emailLookup[$employee['name']] = $employee['email'];
    return $emailLookup;
},[]);
kurangkan: Hantarkan hasil setiap lelaran ke lelaran seterusnya sehingga koleksi dikurangkan kepada satu nilai.

3. Gunakan kaedah kutipan:

$emails = collect($employees)->pluck('name', 'email');
Cadangan berkaitan:

Lima tutorial video Laravel terbaharu

Atas ialah kandungan terperinci Adakah anda tahu apakah senario penggunaan sebenar Koleksi Laravel?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:segmentfault.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam