Laravel中的Array_merge

时间:2018-12-08 06:32:05

标签: php laravel array-merge

我有数据,我将它们返回到集合中,但没有如我所愿返回,我需要帮助修复它。

输出

array:11 [▼
  0 => Collection {#2762 ▼
    #items: array:3 [▼
      0 => Product {#2758 ▶}
      1 => Product {#2759 ▶}
      2 => Product {#2760 ▶}
    ]
  }
  1 => Collection {#2792 ▼
    #items: []
  }
  2 => Collection {#2948 ▼
    #items: []
  }
  3 => Collection {#3102 ▼
    #items: []
  }
  4 => Collection {#3216 ▼
    #items: []
  }
  5 => Collection {#2886 ▼
    #items: array:10 [▶]
  }
  6 => Collection {#2920 ▼
    #items: array:3 [▶]
  }
  7 => Collection {#3046 ▼
    #items: array:12 [▶]
  }
  8 => Collection {#3074 ▼
    #items: []
  }
  9 => Collection {#3188 ▼
    #items: array:7 [▶]
  }
  10 => Collection {#3288 ▼
    #items: []
  }
]

代码

$category = Category::where('slug','=',$catslug)->with('childs', 'parent')->first();


$pp1[] = Product::where('category_id',$category->id)->get();

foreach($category->childs as $first){
$pp2[] = Product::where('category_id',$first->id)->get();
if(count($first->childs)> 0){
    foreach($first->childs as $second){
    $pp3[] = Product::where('category_id',$second->id)->get();
    }
}
}

$products = array_merge($pp1,$pp2,$pp3);

dd($products);

它应该返回什么

它应该仅从1个数组中的所有数组中返回所有产品,而不是按Collection {#2792 ▼分类。我只需要获取包含项目的集合,而不是空项目。

有什么主意吗?

更新

我也尝试过:

$pp1 = [];
      $pp2 = [];
      $pp3 = [];
      $pp1 = Product::where('category_id',$category->id)->get();

      foreach($category->childs as $first){
        $pp2 = Product::where('category_id',$first->id)->get();
        if(count($first->childs)> 0){
          foreach($first->childs as $second){
            $pp3 = Product::where('category_id',$second->id)->get();
          }
        }
      }

它返回:

array_merge(): Argument #1 is not an array

1 个答案:

答案 0 :(得分:0)

您可以获取该类别的所有产品,包括其子代和孙子代,

$category = Category::where('slug','=',$catslug)
                    ->with([
                        'products', 
                        'childs.products', 
                        'childs.childs.products', 
                        'parent'
                     ])
                    ->first()
                    ->toArray();

$products = array_merge([
    data_get($category, 'products'),
    array_collapse(data_get($category, 'childs.*.products')),
    array_collapse(data_get($category, 'childs.*.childs.*.products'))
]);

提琴:https://implode.io/ebXrD8