我正在尝试根据相同的 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',
),
)
使用 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"
}
}
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);