成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

十五個(gè)常用的 Laravel 集合(Collection)

alphahans / 2880人閱讀

摘要:將返回通過回調(diào)真值測(cè)試的第一個(gè)項(xiàng)的鍵。方法將集合分割為多個(gè)給定大小的較小集合。它可用于在任何位置的調(diào)試和查找集合內(nèi)的內(nèi)容。方法用于遍歷整個(gè)集合。這對(duì)集合同樣有效。它將導(dǎo)致由第二個(gè)參數(shù)的值作為鍵的集合。它接受回調(diào)并傳遞并將集合傳遞給它。

文章轉(zhuǎn)自:https://learnku.com/laravel/t... 

Laravel Eloquent 通常返回一個(gè)集合作為結(jié)果,集合包含很多有用的、功能強(qiáng)大的方法。你可以很方便的對(duì)集合進(jìn)行過濾、修改等操作。本次教程就一起來看一看集合的常用方法及功能。
集合并不僅限于 eloquent ,也可以多帶帶使用。但 Eloquent 的結(jié)果就是一個(gè)集合。你可以使用助手函數(shù) collect 將數(shù)組轉(zhuǎn)化為集合。下面所列出的集合的方法適用于 eloquent 結(jié)果的同時(shí)也適用于集合本身。

比方說,你有一個(gè)帖子模型。 你找到所有 php 類別的帖子。

$posts = AppPost::where("category", "php")->get();

上面的命令返回一個(gè)集合。 集合是一個(gè)laravel類,它在內(nèi)部使用數(shù)組函數(shù)并為它們添加許多功能。

你可以簡(jiǎn)單的使用?collect 方法創(chuàng)建一個(gè)集合,如下:

$collection = collect([
    [
        "user_id" => "1",
        "title" => "Helpers in Laravel",
        "content" => "Create custom helpers in Laravel",
        "category" => "php"
    ],
    [
        "user_id" => "2",
        "title" => "Testing in Laravel",
        "content" => "Testing File Uploads in Laravel",
        "category" => "php"
    ],
    [
        "user_id" => "3",
        "title" => "Telegram Bot",
        "content" => "Crypto Telegram Bot in Laravel",
        "category" => "php"
    ],
]);

上面的數(shù)組實(shí)際上是 Post 模型的值。 在本教程中,我們將使用此數(shù)組進(jìn)行簡(jiǎn)化。 請(qǐng)記住,一切都將以同樣的方式基于 eloquent。

當(dāng)我們?cè)?eloquent 集合上使用輔助方法時(shí),不會(huì)再查詢數(shù)據(jù)庫。 我們首先要從數(shù)據(jù)庫中獲取所有結(jié)果,然后我們使用集合方法來過濾和修改它們,而無需查詢數(shù)據(jù)庫。

filter()

filter,最有用的 laravel 集合方法之一,允許您使用回調(diào)過濾集合。 它只傳遞那些返回true的項(xiàng)。 所有其他項(xiàng)目都被刪除。 filter 返回一個(gè)新實(shí)例而不更改原始實(shí)例。 它接受 valuekey 作為回調(diào)中的兩個(gè)參數(shù)。

$filter = $collection->filter(function($value, $key) {
    if ($value["user_id"] == 2) {
        return true;
    }
});

$filter->all();

all 方法返回底層數(shù)組。 上面的代碼返回以下響應(yīng)。

[
    1 => [
        "user_id" => 2,
        "title" => "Testing in Laravel",
        "content" => "Testing File Uploads in Laravel",
        "category" => "php"
    ]
]
search()

search?方法可以用給定的值查找集合。如果這個(gè)值在集合中,會(huì)返回對(duì)應(yīng)的鍵。如果沒有數(shù)據(jù)項(xiàng)匹配對(duì)應(yīng)的值,會(huì)返回 false。

$names = collect(["Alex", "John", "Jason", "Martyn", "Hanlin"]);

$names->search("Jason");

// 2

search 方法默認(rèn)使用松散比較。你可以在它的第二個(gè)參數(shù)傳 true 使用嚴(yán)格比較。

你也可以傳你自己的回調(diào)函數(shù)到 search 方法中。將返回通過回調(diào)真值測(cè)試的第一個(gè)項(xiàng)的鍵。

$names = collect(["Alex", "John", "Jason", "Martyn", "Hanlin"]);

$names->search(function($value, $key) {
    return strlen($value) == 6;
});

// 3
chunk()

chunk?方法將集合分割為多個(gè)給定大小的較小集合。將集合顯示到網(wǎng)格中非常有用。

$prices = collect([18, 23, 65, 36, 97, 43, 81]);

$prices = $prices->chunk(3);

$prices->toArray();

以上代碼生成效果。

[
    0 => [
        0 => 18,
        1 => 23,
        2 => 65
    ],
    1 => [
        3 => 36,
        4 => 97,
        5 => 43
    ],
    2 => [
        6 => 81
    ]
]
dump()

dump?打印集合的方法。 它可用于在任何位置的調(diào)試和查找集合內(nèi)的內(nèi)容。

$collection->whereIn("user_id", [1, 2])
    ->dump()
    ->where("user_id", 1);

dump?上述代碼結(jié)果。

map()

map 方法用于遍歷整個(gè)集合。 它接受回調(diào)作為參數(shù)。 valuekey 被傳遞給回調(diào)。 回調(diào)可以修改值并返回它們。 最后,返回修改項(xiàng)的新集合實(shí)例。

$changed = $collection->map(function ($value, $key) {
    $value["user_id"] += 1;
    return $value;
});

return $changed->all();

基本上,它將 user_id 增加1。

上面代碼的響應(yīng)如下所示。

[
    [
        "user_id" => 2,
        "title" => "Helpers in Laravel",
        "content" => "Create custom helpers in Laravel",
        "category" => "php"
    ],
    [
        "user_id" => 3,
        "title" => "Testing in Laravel",
        "content" => "Testing File Uploads in Laravel",
        "category" => "php"
    ],
    [
        "user_id" => 4,
        "title" => "Telegram Bot",
        "content" => "Crypto Telegram Bot in Laravel",
        "category" => "php"
    ]
];
zip()

Zip 方法會(huì)將給定數(shù)組的值與集合的值合并在一起。相同索引的值會(huì)添加在一起,這意味著,數(shù)組的第一個(gè)值會(huì)與集合的第一個(gè)值合并。在這里,我會(huì)使用我們?cè)谏厦鎰倓倓?chuàng)建的集合。這對(duì) Eloquent 集合同樣有效。

$zipped = $collection->zip([1, 2, 3]);

$zipped->all();

JSON 響應(yīng)會(huì)像這樣。

所以,基本上就是這樣。如果數(shù)組的長(zhǎng)度小于集合的長(zhǎng)度,Laravel 會(huì)給剩下的 Collection 類型的元素末尾添加 null。類似地,如果數(shù)組的長(zhǎng)度比集合的長(zhǎng)度大,Laravel 會(huì)給 Collection 類型的元素添加 null,然后再接著數(shù)組的值。

whereNotIn()

您可以使用 whereNotIn 方法簡(jiǎn)單地按照給定數(shù)組中未包含的鍵值過濾集合。 它基本上與 whereIn 相反。 此外,此方法在匹配值時(shí)使用寬松比較 ==。

讓我們過濾 $collection,其中 user_id 既不是 1 也不是 2的。

$collection->whereNotIn("user_id", [1, 2]);

上面的語句將只返回 $collection 中的最后一項(xiàng)。 第一個(gè)參數(shù)是鍵,第二個(gè)參數(shù)是值數(shù)組。 如果是 eloquent 的話,第一個(gè)參數(shù)將是列的名稱,第二個(gè)參數(shù)將是一個(gè)值數(shù)組。

max()

max 方法返回給定鍵的最大值。 你可以通過調(diào)用max來找到最大的 user_id。 它通常用于價(jià)格或任何其他數(shù)字之類的比較,但為了演示,我們使用 user_id。 它也可以用于字符串,在這種情況下,Z> a。

$collection->max("user_id");

上面的語句將返回最大的 user_id,在我們的例子中是 3。

pluck()

pluck 方法返回指定鍵的所有值。 它對(duì)于提取一列的值很有用。

$title = $collection->pluck("title");
$title->all();

結(jié)果看起來像這樣。

[
  "Helpers in Laravel",
  "Testing in Laravel",
  "Telegram Bot"
]

When working with eloquent, you can pass a column name as an argument to extract its values.?pluck?also accepts a second argument and in the case of eloquent collections, it can be another column name. It will result in collection keyed by the values of the second argument.
使用 eloquent 時(shí),可以將列名作為參數(shù)傳遞以提取值。 pluck 也接受第二個(gè)參數(shù),對(duì)于 eloquent 的集合,它可以是另一個(gè)列名。 它將導(dǎo)致由第二個(gè)參數(shù)的值作為鍵的集合。

$title = $collection->pluck("user_id", "title");
$title->all();

結(jié)果如下:

[
    "Helpers in Laravel" => 1,
    "Testing in Laravel" => 2,
    "Telegram Bot" => 3
]
each()

each 是一種迭代整個(gè)集合的簡(jiǎn)單方法。 它接受一個(gè)帶有兩個(gè)參數(shù)的回調(diào):它正在迭代的項(xiàng)和鍵。 Key 是基于 0 的索引。

$collection->each(function ($item, $key) {
    info($item["user_id"]);
});

上面代碼,只是記錄每個(gè)項(xiàng)的 user_id。

在迭代 eloquent 集合時(shí),您可以將所有列值作為項(xiàng)屬性進(jìn)行訪問。 以下是我們?nèi)绾蔚刑印?/p>

$posts = AppPost::all();

$posts->each(function ($item, $key) {
    // Do something
});

如果回調(diào)中返回 false,它將停止迭代項(xiàng)目。

$collection->each(function ($item, $key) {
    // Tasks
    if ($key == 1) {
        return false;
    }
});
tap()

tap() 方法允許你隨時(shí)加入集合。 它接受回調(diào)并傳遞并將集合傳遞給它。 您可以對(duì)項(xiàng)目執(zhí)行任何操作,而無需更改集合本身。 因此,您可以在任何時(shí)候使用tap來加入集合,而不會(huì)改變集合。

$collection->whereNotIn("user_id", 3)
    ->tap(function ($collection) {
        $collection = $collection->where("user_id", 1);
        info($collection->values());
    })
    ->all();

在上面使用的 tap 方法中,我們修改了集合,然后記錄了值。 您可以對(duì) tap 中的集合做任何您想做的事情。 上面命令的響應(yīng)是:

[
    [
        "user_id" => "1",
        "title" => "Helpers in Laravel",
        "content" => "Create custom helpers in Laravel",
        "category" => "php"
    ],
    [
        "user_id" => "2",
        "title" => "Testing in Laravel",
        "content" => "Testing File Uploads in Laravel",
        "category" => "php"
    ]
]

你可以看到 tap 不會(huì)修改集合實(shí)例。

pipe()

pipe 方法非常類似于 tap 方法,因?yàn)樗鼈兌荚诩瞎艿乐惺褂谩?pipe 方法將集合傳遞給回調(diào)并返回結(jié)果。

$collection->pipe(function($collection) {
    return $collection->min("user_id");
});

上述命令的響應(yīng)是 1。 如果從 pipe 回調(diào)中返回集合實(shí)例,也可以鏈接其他方法。

contains()

contains 方法只檢查集合是否包含給定值。 只傳遞一個(gè)參數(shù)時(shí)才會(huì)出現(xiàn)這種情況。

$contains = collect(["country" => "USA", "state" => "NY"]);

$contains->contains("USA");
// true

$contains->contains("UK");
// false

如果將 鍵 / 值 對(duì)傳遞給 contains 方法,它將檢查給定的鍵值對(duì)是否存在。

$collection->contains("user_id", "1");
// true

$collection->contains("title", "Not Found Title");
// false

您還可以將回調(diào)作為參數(shù)傳遞給回調(diào)方法。 將對(duì)集合中的每個(gè)項(xiàng)目運(yùn)行回調(diào),如果其中任何一個(gè)項(xiàng)目通過了真值測(cè)試,它將返回 true 否則返回 false

$collection->contains(function ($value, $key) {
    return strlen($value["title"]) < 13;
});
// true

回調(diào)函數(shù)接受當(dāng)前迭代項(xiàng)和鍵的兩個(gè)參數(shù)值。 這里我們只是檢查標(biāo)題的長(zhǎng)度是否小于13。在 Telegram Bot 中它是12,所以它返回 true。

forget()

forget 只是從集合中刪除該項(xiàng)。 您只需傳遞一個(gè)鍵,它就會(huì)從集合中刪除該項(xiàng)目。

$forget = collect(["country" => "usa", "state" => "ny"]);

$forget->forget("country")->all();

上面代碼響應(yīng)如下:

[
    "state" => "ny"
]

forget 不適用于多維數(shù)組。

avg()

avg 方法返回平均值。 你只需傳遞一個(gè)鍵作為參數(shù),avg 方法返回平均值。 你也可以使用 average 方法,它基本上是 avg 的別名。

$avg = collect([
    ["shoes" => 10],
    ["shoes" => 35],
    ["shoes" => 7],
    ["shoes" => 68],
])->avg("shoes");

上面的代碼返回?30?,這是所有四個(gè)數(shù)字的平均值。 如果你沒有將任何鍵傳遞給avg 方法并且所有項(xiàng)都是數(shù)字,它將返回所有數(shù)字的平均值。 如果鍵未作為參數(shù)傳遞且集合包含鍵/值對(duì),則 avg 方法返回 0。

$avg = collect([12, 32, 54, 92, 37]);

$avg->avg();

上面的代碼返回 45.4,這是所有五個(gè)數(shù)字的平均值。

您可以使用這些 laravel 集合方法在您自己的項(xiàng)目中處理集合。

文章轉(zhuǎn)自:https://learnku.com/laravel/t... 

更多文章:https://learnku.com/laravel/c...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/31290.html

相關(guān)文章

  • 你可能需要了解下Laravel集合

    摘要:前言集合通過進(jìn)行實(shí)例,的內(nèi)核大部分的參數(shù)傳遞都用到了集合,但這并不代表集合就是好的。當(dāng)你需要處理一組數(shù)組時(shí),你可能就需要它幫助你快捷的解決實(shí)際問題。例如我們需要通過一個(gè)水平線切分?jǐn)?shù)組,將其分為個(gè)及以上的數(shù)組個(gè)數(shù)。謝謝,還不抓緊去練習(xí)下集合 showImg(https://segmentfault.com/img/bVbhjvY?w=600&h=296); 前言 集合通過 Illumin...

    fuyi501 評(píng)論0 收藏0
  • Laravel Excel 五個(gè)隱藏功能

    摘要:文檔示例注意你必須通過安裝指定的包,比如導(dǎo)出的如下所示按需格式化單元格有一個(gè)強(qiáng)有力的爸爸。因此它就擁有其各種底層功能,包括各種方式的單元格格式化。 showImg(https://segmentfault.com/img/remote/1460000018375787?w=1680&h=859); Laravel Excel package 最近發(fā)布了 3.0 版本,它所具有的新功能,...

    tinna 評(píng)論0 收藏0
  • (十五)java多線程之并發(fā)集合ArrayBlockingQueue

    摘要:本人郵箱歡迎轉(zhuǎn)載轉(zhuǎn)載請(qǐng)注明網(wǎng)址代碼已經(jīng)全部托管有需要的同學(xué)自行下載引言做的同學(xué)們或多或少的接觸過集合框架在集合框架中大多的集合類是線程不安全的比如我們常用的等等我們寫一個(gè)例子看為什么說是不安全的例子證明是線程不安全的我們開啟個(gè)線程每個(gè)線程向 本人郵箱: 歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明網(wǎng)址 http://blog.csdn.net/tianshi_kcogithub: https://github...

    stefan 評(píng)論0 收藏0
  • jQuery 源碼系列(十五)DOM 操作

    摘要:歡迎來我的專欄查看系列文章。所以內(nèi)部一個(gè)統(tǒng)一的做法,就是采用的方式,先對(duì)要進(jìn)行操作的內(nèi)部函數(shù)執(zhí)行操作,然后回調(diào)執(zhí)行任務(wù)。剩下的事情,就交給回調(diào)函數(shù)去處理。所以,的作用遠(yuǎn)比想象的要少。 歡迎來我的專欄查看系列文章。 可能你會(huì)覺得這個(gè)名字很奇怪這個(gè)名字很奇怪,為什么叫做 domManip,即所謂的 dom 微操作。 showImg(https://segmentfault.com/img/...

    PascalXie 評(píng)論0 收藏0
  • 教程:Laravel 集合Collection基礎(chǔ)用法

    摘要:方法可以傳一個(gè)單一值,或一組鍵值對(duì)或者一個(gè)回調(diào)函數(shù),然后它會(huì)返回一個(gè)布爾值來告知目標(biāo)內(nèi)容是否在集合中。排序方法接受一個(gè)鍵或回調(diào)函數(shù)參數(shù)用于對(duì)集合進(jìn)行排序。獲取一個(gè)集合中所有數(shù)字的和方法通過回調(diào)函數(shù)傳遞每個(gè)數(shù)據(jù)項(xiàng)。 showImg(https://segmentfault.com/img/remote/1460000018726031?w=1252&h=640); 文章轉(zhuǎn)自:https:...

    CoderStudy 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<