PHP 合并两个或多个数据模型为同一集合,并按某字段排序

博客介绍了PHP合并两个或多个数据模型为同一集合,并按某字段排序的需求。在实际应用中,会从两个不同数据表查询到不同数据模型,返回的数据集合需包含这两个模型。

PHP 合并两个或多个数据模型为同一集合,并按某字段排序

首先这种需求在实际应用中还是存在的

有两个不同的数据表查询到两个不同的数据模型,返回的数据集合要包含这两个模型

下面看做法:

# ------------------------------------------------------------------------------------ #

public function Featured(Request $request, News $newsModel, Active $activeModel)
{
    $userId = $request->user('api')->id;

    $news = $newsModel->query()
        ->limit($request->query('limit', 15))
        ->get()->toArray();

    $actives = $activeModel->query()
        ->limit($request->query('limit', 15))
        ->get()->toArray();

    // 合并数据
    $data['news'] = $news;
    $data['actives'] = $actives;
    $square = array_merge_recursive($data['news'],$data['actives']); # 把两个不同的数据模型合并成一个数组集合

    // 把合并后的数据按时间排序
    $order = array_column($square,'updated_at'); # 取出排序需要的字段,注:这个字段是两个数据模型里都要有的共同字段
    array_multisort($order, SORT_DESC, $square); # 按照取出的字段进行排序,下图有array_multisort()函数用法

    return response()->json($square, 200);
}

# ------------------------------------------------------------------------------------ #

 

祝大家工作顺利,身体健康!

### 使用Java Lambda 表达式合并集合 在 Java 中,可以利用 `Stream` API 和 Lambda 表达式的强大功能来轻松处理集合操作。对于两个多个集合合并操作,可以通过 `Stream.concat()` 方法者直接将它们转换为流再收集到一个新的列表中。 以下是通过 Lambda 表达式实现集合合并的一个具体示例: #### 示例代码 ```java import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; public class MergeCollectionsExample { public static void main(String[] args) { List<String> list1 = Arrays.asList("first", "second"); List<String> list2 = Arrays.asList("third", "fourth"); // 使用 Stream.concat 将两个列表合并 List<String> mergedList = Stream.concat(list1.stream(), list2.stream()) .collect(Collectors.toList()); System.out.println(mergedList); // 输出: [first, second, third, fourth] } } ``` 上述代码展示了如何使用 `Stream.concat()` 来连接两个 `List` 将其转化为新的列表[^5]。这里的关键在于将每个集合转为流 (`list.stream()`),然后通过 `Stream.concat()` 进行拼接,最后用 `Collectors.toList()` 收集结果。 如果存在更集合需要合并,则可以链式调用次 `concat` 者考虑其他更灵活的方式,比如先将所有集合放入一个父集合中,之后统一展开成流。 #### 更场景下的扩展应用 当有超过两个以上的集合时,也可以采用如下方式完成合并: ```java import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; public class MultipleMergeExample { public static void main(String[] args) { List<String> list1 = Arrays.asList("one", "two"); List<String> list2 = Arrays.asList("three", "four"); List<String> list3 = Arrays.asList("five", "six"); // 创建一个包含所有子列表的大列表 List<List<String>> listOfLists = new ArrayList<>(); listOfLists.add(list1); listOfLists.add(list2); listOfLists.add(list3); // 展开大列表中的所有元素至单一列表 List<String> flatMergedList = listOfLists.stream() .flatMap(List::stream) .collect(Collectors.toList()); System.out.println(flatMergedList); // 输出: [one, two, three, four, five, six] } } ``` 此段代码演示了当面对多个合并集合的情况时,可借助 `flatMap` 函数一次性扁平化所有的嵌套结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值