亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Laravel中Collection使用場景是什么

發布時間:2021-08-27 17:56:34 來源:億速云 閱讀:229 作者:小新 欄目:編程語言

小編給大家分享一下Laravel中Collection使用場景是什么,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

求和

需求:遍歷$orders 數組,求price 的和。
<?php
// 引入package
require __DIR__ . '/vendor/autoload.php';

$orders = [[
    'id'            =>      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'=>[]]],
    ],
]];

undefined

$sum = 0;
foreach ($orders as $order) {
    foreach ($order['order_products'] as $item) {
        $sum += $item['price'];
    }
}
echo $sum;

undefined

$sum = collect($orders)->map(function($order){
    return $order['order_products'];
})->flatten(1)->map(function($order){
    return $order['price'];
})->sum();

echo $sum;

map:遍歷集合,返回一個新的集合。
flatten:將多維數組轉換為一維。
sum:返回數組的和。

undefined

$sum = collect($orders)->flatMap(function($order){
    return $order['order_products'];
})->pluck('price')->sum();
echo $sum;

flatMap:和map 類似,不過區別在于flatMap 可以直接使用返回的新集合。

undefined

$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'
];

undefined

$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);

undefined

$res = collect($gates)->map(function($gate) {
    $parts = explode('_', $gate);
    return end($parts);
});

undefined

$res = collect($gates)->map(function($gate) {
    return collect(explode('_', $gate))->last();
})->toArray();

explode:將字符串進行分割成數組
last:獲取最后一個元素

統計GitHub Event

首先,通過此鏈接獲取到個人事件json。

一個 PushEvent計 5 分,一個 CreateEvent 計 4 分,一個 IssueCommentEvent計 3 分,一個 IssueCommentEvent 計 2 分,除此之外的其它類型的事件計 1 分,計算當前用戶的時間得分總和。

$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);

undefined

$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;
    }
}

undefined

$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();

使用集合的鏈式編程,可以很好地解決上面那種多次遍歷的問題。

undefined

$score = $events->pluck('type')->map(function($eventType) {
   return collect([
       'PushEvent'=> 5,
       'CreateEvent'=> 4,
       'IssueEvent'=> 3,
       'IssueCommentEvent'=> 2
   ])->get($eventType, 1); // 如果不存在則默認等于1
})->sum();

undefined

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));

格式化數據

需求:將以下數據格式化成新的結構。
$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.

undefined

$comment = '- ' . array_shift($messages);
foreach ($messages as $message) {
    $comment .= "\n -  ${message}";
}
var_dump($comment);

undefined

$comment = collect($messages)->map(function($message){
    return '- ' . $message;
})->implode("\n");
var_dump($comment);

多個數組求差

需求:兩組數據分別代表去年的營收和今年的營收,求每個月的盈虧情況。
$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
];

undefined

$profit = [];
foreach($thisYear as $key => $monthly){
    $profit[$key] = $monthly - $lastYear[$key];
}
var_dump($profit);

undefined

$profit = collect($thisYear)->zip($lastYear)->map(function($monthly){
    return $monthly->first() - $monthly->last();
});

zip:將給定數組的值與相應索引處的原集合的值合并在一起。

創建lookup 數組

需求:將如下數組格式化成下面的結果:
$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'
];

undefined

$emails = [];
foreach ($employees as $key => $value) {
    $emails[$value['name']] = $value['email'];
}

undefined

$emails = collect($employees)->reduce(function($emailLookup, $employee){
    $emailLookup[$employee['name']] = $employee['email'];
    return $emailLookup;
},[]);

reduce:將每次迭代的結果傳遞給下一次迭代直到集合減少為單個值。

undefined

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

看完了這篇文章,相信你對“Laravel中Collection使用場景是什么”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

贺兰县| 正镶白旗| 汶川县| 六安市| 马山县| 麻阳| 贵德县| 清涧县| 惠水县| 嘉禾县| 新营市| 桃江县| 家居| 昭觉县| 治县。| 鄂州市| 新绛县| 宁都县| 同江市| 宝丰县| 遵化市| 神农架林区| 融水| 霞浦县| 苍梧县| 西林县| 石阡县| 汝州市| 玉门市| 镇巴县| 越西县| 湛江市| 大渡口区| 黔江区| 都昌县| 英山县| 呈贡县| 泗水县| 宜黄县| 五台县| 大兴区|