簡體   English   中英

如何訪問 Laravel 集合中的子數組?

[英]How can I access a child array in a Laravel Collection?

我有一個數據庫搜索,它返回數千個條目,然后按兩列分組,如下所示:

$results = $merged->groupBy(['source', 'parent']);

結果是 Laravel Collection 具有以下結構,首先按“源”( 1_k12_fill_trypsin_dig )分組,然后是“父”(2、4、9、10 2, 4, 9, 10... ),每個“父”都有一定數量的子:

['第 1 組'=> []

我想按父母的孩子數量對父母進行排序。 因此,在此示例中,我希望“4”位於頂部,以便子計數在某些閉包中用作“真值測試”。 我只是不知道如何訪問這些元素。 我希望使用 Collection 方法,而不是使用 vanilla PHP 循環。

你試過按他們的數量排序嗎?

按來源計數排序

$merged
    ->groupBy(...)
    ->sort(function ($sources) {
        return collect($sources)->count();
    });

按父母人數排序

$merged
    ->groupBy(...)
    ->sort(function ($sources) {
        return collect($sources)
            ->sum(function ($parents) {
                return count($parents);
            });
    });

要僅對嵌套數組進行排序,您可以使用map()transform()

$merged
    ->groupBy(['source', 'parent'])
    ->map(function ($source) {
        return collect($source)
            ->sortByDesc(function ($parent) {
                return count($parent);
            })
            ->all();
    });

// PHP 7.4+
$merged
    ->groupBy(['source', 'parent'])
    ->map(fn($source) => 
        collect($source)
            ->sortByDesc(fn($parent) => count($parent))
            ->all()
    );

我使用 Faker 生成了與您類似的 collections,它對我有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM