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

在我的 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。是因为我的代码吗?


MMMHUHU
浏览 103回答 2
2回答

手掌心

根据 splash58 的评论,您可以使用array_column()然后合并数组,同时只保留第一项。可以在这里看到一个样本。<?php$records = array(&nbsp; &nbsp; array(&nbsp; &nbsp; &nbsp; &nbsp; 'id' => 2135,&nbsp; &nbsp; &nbsp; &nbsp; 'first_name' => 'John',&nbsp; &nbsp; &nbsp; &nbsp; 'last_name' => 'Doe',&nbsp; &nbsp; ),&nbsp; &nbsp; array(&nbsp; &nbsp; &nbsp; &nbsp; 'id' => 3245,&nbsp; &nbsp; &nbsp; &nbsp; 'first_name' => 'Sally',&nbsp; &nbsp; &nbsp; &nbsp; 'last_name' => 'Smith',&nbsp; &nbsp; ),&nbsp; &nbsp; array(&nbsp; &nbsp; &nbsp; &nbsp; 'id' => 5342,&nbsp; &nbsp; &nbsp; &nbsp; 'first_name' => 'Jane',&nbsp; &nbsp; &nbsp; &nbsp; 'last_name' => 'Jones',&nbsp; &nbsp; ),&nbsp; &nbsp; array(&nbsp; &nbsp; &nbsp; &nbsp; 'id' => 5623,&nbsp; &nbsp; &nbsp; &nbsp; 'first_name' => 'Peter',&nbsp; &nbsp; &nbsp; &nbsp; 'last_name' => 'Doe',&nbsp; &nbsp; ));$records2 = array(&nbsp; &nbsp; array(&nbsp; &nbsp; &nbsp; &nbsp; 'id' => 2135,&nbsp; &nbsp; &nbsp; &nbsp; 'first_name' => 'John',&nbsp; &nbsp; &nbsp; &nbsp; 'last_name' => 'Doe',&nbsp; &nbsp; ),&nbsp; &nbsp; array(&nbsp; &nbsp; &nbsp; &nbsp; 'id' => 3245,&nbsp; &nbsp; &nbsp; &nbsp; 'first_name' => 'Sally',&nbsp; &nbsp; &nbsp; &nbsp; 'last_name' => 'Smith',&nbsp; &nbsp; ),&nbsp; &nbsp; array(&nbsp; &nbsp; &nbsp; &nbsp; 'id' => 5342,&nbsp; &nbsp; &nbsp; &nbsp; 'first_name' => 'Jane',&nbsp; &nbsp; &nbsp; &nbsp; 'last_name' => 'Jones',&nbsp; &nbsp; ),&nbsp; &nbsp; array(&nbsp; &nbsp; &nbsp; &nbsp; 'id' => 5624,&nbsp; &nbsp; &nbsp; &nbsp; 'first_name' => 'Peter',&nbsp; &nbsp; &nbsp; &nbsp; 'last_name' => 'Doe',&nbsp; &nbsp; ));$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);

慕雪6442864

你可以这样做:$result = [];$array1 = [&nbsp; [&nbsp; &nbsp; "id" => 1,&nbsp; &nbsp; "other_data" => "text1"&nbsp; ],&nbsp; [&nbsp; &nbsp; "id" => 2,&nbsp; &nbsp; "other_data" => "text2"&nbsp; ],&nbsp; [&nbsp; &nbsp; "id" => 3,&nbsp; &nbsp; "other_data" => "text3"&nbsp; ],&nbsp;&nbsp;];$array2 = [&nbsp; [&nbsp; &nbsp; "id" => 1,&nbsp; &nbsp; "other_data" => "text1"&nbsp; ],&nbsp; [&nbsp; &nbsp; "id" => 8,&nbsp; &nbsp; "other_data" => "text8"&nbsp; ],];$merge_array = function($array, $result) {&nbsp; foreach($array as $element) {&nbsp; &nbsp; &nbsp; $id = $element["id"]; //In your case it could be $element->getId()&nbsp; &nbsp; &nbsp; if(!isset($result[$id])) {&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$result[$id] = $element;&nbsp; &nbsp; &nbsp; }&nbsp; }&nbsp; return $result;};$result = $merge_array($array1, $result);$result = $merge_array($array2, $result);print_r(array_values($result));
打开App,查看更多内容
随时随地看视频慕课网APP