为了账号安全,请及时绑定邮箱和手机立即绑定

PHP - 合并两个对象数组,包括其他对象

PHP - 合并两个对象数组,包括其他对象

PHP
MMMHUHU 2022-05-27 09:53:48
在我的 symfony 项目中,我需要能够在删除重复项的同时合并多个对象数组。例如 :数组 1:Array(    [0] => Absence Object        (            [id] => 1            [type] => TypeConge Object ([id] => 4, [nom] => "Maladie")            [user] => User Object (......)            [debut] => 12-11-2019 00:00:00        )    [1] => Absence Object        (            [id] => 2            [type] => TypeConge Object ([id] => 5, [nom] => "CA")            [user] => User Object (......)            [debut] => 13-11-2019 00:00:00        )    [2] => Absence Object        (            [id] => 3            [type] => TypeConge Object ([id] => 4, [nom] => "Maladie")            [user] => User Object (......)            [debut] => 11-11-2019 00:00:00        )    )阵列 2:Array(    [0] => Absence Object        (            [id] => 1            [type] => TypeConge Object ([id] => 4, [nom] => "Maladie")            [user] => User Object (......)            [debut] => 12-11-2019 00:00:00        )    [1] => Absence Object        (            [id] => 8            [type] => TypeConge Object ([id] => 4, [nom] => "Maladie")            [user] => User Object (......)            [debut] => 17-11-2019 00:00:00        )    )输出:    Array(    [0] => Absence Object        (            [id] => 1            [type] => TypeConge Object ([id] => 4, [nom] => "Maladie")            [user] => User Object (......)            [debut] => 12-11-2019 00:00:00        )    [1] => Absence Object        (            [id] => 2            [type] => TypeConge Object ([id] => 5, [nom] => "CA")            [user] => User Object (......)            [debut] => 13-11-2019 00:00:00        )我使用这段代码来做到这一点:$demandes = $this->getDemandesValidateur($unUser, $search, $superValidation);$tabDemandes = array_merge($tabDemandes, $demandes);$tabDemandes = array_map("unserialize", array_unique(array_map("serialize", $tabDemandes)));但我的印象是,由于序列化和反序列化,它会导致错误。我得到了很好的决赛桌,但有些数据似乎无法使用。例如我不能打电话:$absence->getType()->getNom();它有时会返回 null。是因为我的代码吗?
查看完整描述

2 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

根据 splash58 的评论,您可以使用array_column()然后合并数组,同时只保留第一项。可以在这里看到一个样本。


<?php


$records = array(

    array(

        'id' => 2135,

        'first_name' => 'John',

        'last_name' => 'Doe',

    ),

    array(

        'id' => 3245,

        'first_name' => 'Sally',

        'last_name' => 'Smith',

    ),

    array(

        'id' => 5342,

        'first_name' => 'Jane',

        'last_name' => 'Jones',

    ),

    array(

        'id' => 5623,

        'first_name' => 'Peter',

        'last_name' => 'Doe',

    )

);


$records2 = array(

    array(

        'id' => 2135,

        'first_name' => 'John',

        'last_name' => 'Doe',

    ),

    array(

        'id' => 3245,

        'first_name' => 'Sally',

        'last_name' => 'Smith',

    ),

    array(

        'id' => 5342,

        'first_name' => 'Jane',

        'last_name' => 'Jones',

    ),

    array(

        'id' => 5624,

        'first_name' => 'Peter',

        'last_name' => 'Doe',

    )

);


$first = array_column($records, null, 'id');

$second = array_column($records2, null, 'id');

$third = $first + $second;


// if you want to reset indexes

// $third = array_values($third);


echo print_r($third);


查看完整回答
反对 回复 2022-05-27
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

你可以这样做:


$result = [];


$array1 = [

  [

    "id" => 1,

    "other_data" => "text1"

  ],

  [

    "id" => 2,

    "other_data" => "text2"

  ],

  [

    "id" => 3,

    "other_data" => "text3"

  ],  

];


$array2 = [

  [

    "id" => 1,

    "other_data" => "text1"

  ],

  [

    "id" => 8,

    "other_data" => "text8"

  ],

];


$merge_array = function($array, $result) {

  foreach($array as $element) {

      $id = $element["id"]; //In your case it could be $element->getId()

      if(!isset($result[$id])) { 

         $result[$id] = $element;

      }

  }


  return $result;

};


$result = $merge_array($array1, $result);

$result = $merge_array($array2, $result);

print_r(array_values($result));


查看完整回答
反对 回复 2022-05-27
  • 2 回答
  • 0 关注
  • 102 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号