Rumah > rangka kerja php > Laravel > teks badan

Adakah anda tahu apakah senario penggunaan sebenar Koleksi Laravel?

藏色散人
Lepaskan: 2021-08-27 09:28:40
ke hadapan
2204 orang telah melayarinya

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'=>[]]],
    ],
]];
Salin selepas log masuk
1. Gunakan kaedah foreach tradisional untuk melintasi:
$sum = 0;
foreach ($orders as $order) {
    foreach ($order['order_products'] as $item) {
        $sum += $item['price'];
    }
}
echo $sum;
Salin selepas log masuk
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;
Salin selepas log masuk

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;
Salin selepas log masuk

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');
Salin selepas log masuk

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'
];
Salin selepas log masuk
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);
Salin selepas log masuk
2 Gunakan peta koleksi dan letupan dan penghujung PHP:
$res = collect($gates)->map(function($gate) {
    $parts = explode('_', $gate);
    return end($parts);
});
Salin selepas log masuk
3 Gunakan peta, letup, terakhir, dan toArray koleksi :
$res = collect($gates)->map(function($gate) {
    return collect(explode('_', $gate))->last();
})->toArray();
Salin selepas log masuk

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);
Salin selepas log masuk
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;
    }
}
Salin selepas log masuk
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();
Salin selepas log masuk

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();
Salin selepas log masuk
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));
Salin selepas log masuk

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.
Salin selepas log masuk
2. Gunakan kaedah pemetaan dan letupan:
$comment = '- ' . array_shift($messages);
foreach ($messages as $message) {
    $comment .= "\n -  ${message}";
}
var_dump($comment);
Salin selepas log masuk
$comment = collect($messages)->map(function($message){
    return '- ' . $message;
})->implode("\n");
var_dump($comment);
Salin selepas log masuk

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
];
Salin selepas log masuk
2 Gunakan zip, pertama dan terakhir koleksi:
$profit = [];
foreach($thisYear as $key => $monthly){
    $profit[$key] = $monthly - $lastYear[$key];
}
var_dump($profit);
Salin selepas log masuk
$profit = collect($thisYear)->zip($lastYear)->map(function($monthly){
    return $monthly->first() - $monthly->last();
});
Salin selepas log masuk
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'
];
Salin selepas log masuk
2 kaedah pengurangan koleksi:
$emails = [];
foreach ($employees as $key => $value) {
    $emails[$value['name']] = $value['email'];
}
Salin selepas log masuk
$emails = collect($employees)->reduce(function($emailLookup, $employee){
    $emailLookup[$employee['name']] = $employee['email'];
    return $emailLookup;
},[]);
Salin selepas log masuk
kurangkan: Hantarkan hasil setiap lelaran ke lelaran seterusnya sehingga koleksi dikurangkan kepada satu nilai.

3. Gunakan kaedah kutipan:

$emails = collect($employees)->pluck('name', 'email');
Salin selepas log masuk
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!

Label berkaitan:
sumber:segmentfault.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!