我现在的做法是这样的,定义了两个数组模拟模型查询结果

$counts=collect([['id'=>2,'count'=>10],['id'=>3,'count'=>15]]);
$names=collect([['id'=>1,'name'=>'张三'],['id'=>2,'name'=>'李四'],['id'=>3,'name'=>'王五']]);
/** 根据 KEY字段 合并两个集合
* @param {*} $key 字段名
* @param {*} $collect1 集合1,完全保留
* @param {*} $collect2 集合2,仅保留集合1中有该KEY的元素
* @return {*} 合并后结果
function CollectMerge($key,$collect1,$collect2)
    $arr1=$collect1->keyBy($key)->toArray();
    $arr2=$collect2->keyBy($key)->toArray();
    $result=array_map(function($item) use($arr2,$key){
        return array_merge($item,$arr2[$item[$key]]);
    },$arr1);
    return array_values($result);
dd(CollectMerge('id',$counts,$names));
array:2 [
  0 => array:3 [
    "id" => 2
    "count" => 10
    "name" => "李四"
  1 => array:3 [
    "id" => 3
    "count" => 15
    "name" => "王五"

该方法虽然有效,但总感觉不是最优解,希望大佬们给指正下

$counts = [['id' => 2, 'count' => 10], ['id' => 3, 'count' => 15]]; $names = [['id' => 1, 'name' => '张三'], ['id' => 2, 'name' => '李四'], ['id' => 3, 'name' => '王五']]; $countMap = array_column($counts, 'count', 'id'); $names = array_map(function ($item) use ($countMap) { $item['count'] = $countMap[$item['id']] ?? 0; return $item; }, $names); print_r($names);