根据共享id合并两个或多个对象数组

问题描述 投票:0回答:2

我正在尝试根据相同的 ID 合并两个或多个多维数组。

所有数组均由不同的数据库表查询填充。

我的目标:尝试将所有数组合并在一起并获取数据以查看页表。

我正在为我的项目使用 codeigniter 框架。

$array1
来自“成员”表。
$array2
$array3
$array4
来自带有 where 条件的“注册”表。

我的数组:

$array1 = [
    1 => (object) [
        "mem_tbl_id" => 1,
        "m_name_e" => "Titus C.",
        "member_id" => "KZI37M3025",
        "gender" => "Male",
        "m_number" => 9489455057,
        "familyid" => "KZI54F2256"
    ],
    2 => (object) [
        "mem_tbl_id" => 2,
        "m_name_e" => "Baby Helen",
        "member_id" => "KZI45M6402",
        "gender" => "Female",
        "m_number" => null,
        "familyid" => "KZI54F2256"
    ],
    3 => (object) [
        "mem_tbl_id" => 3,
        "m_name_e" => "Satheesh Premananth T.",
        "member_id" => "KZI69M3438",
        "gender" => "Male",
        "m_number" => null,
        "familyid" => "KZI69F5619"
    ]
];

$array2 = [
    1 => (object) [
        "mem_tbl_id" => 1,
        "do_birth" => "1937-09-18"
    ],
    2 => (object) [
        "mem_tbl_id" => 2,
        "do_birth" => "1945-02-06"
    ],
    3 => (object) [
        "mem_tbl_id" => 3,
        "do_birth" => "1968-04-12"
    ]
];

$array3 = [
    3 => (object) [
        "mem_tbl_id" => 3,
        "do_baptism" => "1969-04-13"
    ]
];

$array4 = [
    1 => (object) [
        "mem_tbl_id" => 1,
        "do_confirm" => "1954-04-07"
    ],
    3 => (object) [
        "mem_tbl_id" => 3,
        "do_confirm" => "1990-04-29"
    ]
];

想要的结果:

array (
  1 => 
  (object) array(
     'mem_tbl_id' => 1,
     'm_name_e' => 'Titus C.',
     'member_id' => 'KZI37M3025',
     'gender' => 'Male',
     'm_number' => 9489455057,
     'familyid' => 'KZI54F2256',
     'do_birth' => '1937-09-18',
     'do_confirm' => '1954-04-07',
  ),
  2 => 
  (object) array(
     'mem_tbl_id' => 2,
     'm_name_e' => 'Baby Helen',
     'member_id' => 'KZI45M6402',
     'gender' => 'Female',
     'm_number' => null,
     'familyid' => 'KZI54F2256',
     'do_birth' => '1945-02-06',
  ),
  3 => 
  (object) array(
     'mem_tbl_id' => 3,
     'm_name_e' => 'Satheesh Premananth T.',
     'member_id' => 'KZI69M3438',
     'gender' => 'Male',
     'm_number' => null,
     'familyid' => 'KZI69F5619',
     'do_birth' => '1968-04-12',
     'do_baptism' => '1969-04-13',
     'do_confirm' => '1990-04-29',
  ),
)
php arrays object merging-data
2个回答
0
投票

使用 array_merge_recursive();

$marger_array = array_merge_recursive($Array1, $Array2, $Array3, $Array4);

var_dump($marger_array);

输出:(演示

array(9) {
  [0]=>
  object(stdClass)#1 (6) {
    ["mem_tbl_id"]=>
    int(1)
    ["m_name_e"]=>
    string(8) "Titus C."
    ["member_id"]=>
    string(10) "KZI37M3025"
    ["gender"]=>
    string(4) "Male"
    ["m_number"]=>
    int(9489455057)
    ["familyid"]=>
    string(10) "KZI54F2256"
  }
  [1]=>
  object(stdClass)#2 (6) {
    ["mem_tbl_id"]=>
    int(2)
    ["m_name_e"]=>
    string(10) "Baby Helen"
    ["member_id"]=>
    string(10) "KZI45M6402"
    ["gender"]=>
    string(6) "Female"
    ["m_number"]=>
    NULL
    ["familyid"]=>
    string(10) "KZI54F2256"
  }
  [2]=>
  object(stdClass)#3 (6) {
    ["mem_tbl_id"]=>
    int(3)
    ["m_name_e"]=>
    string(22) "Satheesh Premananth T."
    ["member_id"]=>
    string(10) "KZI69M3438"
    ["gender"]=>
    string(4) "Male"
    ["m_number"]=>
    NULL
    ["familyid"]=>
    string(10) "KZI69F5619"
  }
  [3]=>
  object(stdClass)#4 (2) {
    ["mem_tbl_id"]=>
    int(1)
    ["do_birth"]=>
    string(10) "1937-09-18"
  }
  [4]=>
  object(stdClass)#5 (2) {
    ["mem_tbl_id"]=>
    int(2)
    ["do_birth"]=>
    string(10) "1945-02-06"
  }
  [5]=>
  object(stdClass)#6 (2) {
    ["mem_tbl_id"]=>
    int(3)
    ["do_birth"]=>
    string(10) "1968-04-12"
  }
  [6]=>
  object(stdClass)#7 (2) {
    ["mem_tbl_id"]=>
    int(3)
    ["do_baptism"]=>
    string(10) "1969-04-13"
  }
  [7]=>
  object(stdClass)#8 (2) {
    ["mem_tbl_id"]=>
    int(1)
    ["do_confirm"]=>
    string(10) "1954-04-07"
  }
  [8]=>
  object(stdClass)#9 (2) {
    ["mem_tbl_id"]=>
    int(3)
    ["do_confirm"]=>
    string(10) "1990-04-29"
  }
}

0
投票

PHP 无法像数组那样轻松合并对象。

理想情况下,您应该在模型中编写更复杂的查询,以允许数据库合并这些数据。

在没有表模式详细信息的情况下,您可以使用第一个数组手动设置结果数组,然后迭代其他数组并根据第一级键(或者如果您愿意,也可以使用

mem_tbl_id
)将它们的数据写入结果数组).

因为第一个数组将包含所有可能的 id,所以实际上不需要

isset()
检查,但为了将来的读者,我将添加它(如果可能遇到新标识符,只需取消注释即可)。

代码:(演示

$result = $array1;
foreach ([$array2, $array3, $array4] as $objectArray) {
    foreach ($objectArray as $id => $obj) {
        foreach ($obj as $prop => $val) {
            //if (!isset($result[$id])) {
            //    $result[$id] = (object) [];
            //} else {
                $result[$id]->$prop = $val;
            //}
        }
    }
}
var_export($result);
© www.soinside.com 2019 - 2024. All rights reserved.