我想知道是否可以根據特定的屬性值過濾 laravel 集合。
[
{
"id": 2,
"perm_id": 1,
},
{
"id": 3,
"perm_id": 1,
},
{
"id": 10,
"perm_id": 2,
},
{
"id": 9,
"perm_id": 1
}
]
這就是我的收藏結構的樣子。我有多個相同的物件perm_id。id我需要為每個回傳最高的物件perm_id。所以最終的回傳值應該是這樣的:
[
{
"id": 10,
"perm_id": 2,
},
{
"id": 9,
"perm_id": 1
}
]
uj5u.com熱心網友回復:
您可以對所有專案進行分組perm_id,然后將它們映射到最高id。
$arr = [
(object) [
"id" => 2,
"perm_id" => 1,
],
(object) [
"id" => 3,
"perm_id" => 1,
],
(object) [
"id" => 10,
"perm_id" => 2,
],
(object) [
"id" => 9,
"perm_id" => 1
]
];
$filtered = collect($arr)->sortByDesc('id')->groupBy('perm_id')->map(fn($item) => $item[0]);
dd($filtered);
uj5u.com熱心網友回復:
試試這個->
$arr = [
[
"id" => 2,
"perm_id" => 1,
],
[
"id" => 3,
"perm_id" => 1,
],
[
"id" => 10,
"perm_id" => 2,
],
[
"id" => 9,
"perm_id" => 1
]
];
$filtered = collect($arr) // convert array to Collection
->sortByDesc('id') // sort by id, in descending order
->unique('perm_id') // get perm_id's 1st occurrence value as it is sorted, it will get highest value
->values() // reset array keys
->toArray() // convert back to array
;
輸出:
[
{
"id": 10,
"perm_id": 2,
},
{
"id": 9,
"perm_id": 1
}
]
uj5u.com熱心網友回復:
這可以在 Laravel 的檔案中找到:使用 map 函式,您可以按屬性值進行過濾。 https://laravel.com/docs/9.x/collections
$collection = collect(['taylor', 'abigail', null])->map(function ($name) {
return strtoupper($name);
})->reject(function ($name) {
return empty($name);
});
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/515801.html
標籤:php拉拉维尔
上一篇:函式弧度(jsonb)不存在
