Jay*_*len 4 php arrays left-join array-merge
我有一个连接到多个服务器的应用程序。其中一台服务器的 ID 是位于另一台服务器上的表的外键。这里的问题是 MySQL 不支持链接服务器,因此我无法运行将 LEFT 连接位于不同服务器上的 2 个表的左查询。
所以我必须使用 PHP 从 2 个不同的服务器中提取 2 个单独的查询,然后他们使用 PHP 来加入它们。
请注意,下面列出的数组键需要是动态的。我不能使用固定名称,因为不同的查询会有不同的列名。下面的示例使用 phone_call_id 作为它们用于连接两个数组的键,并结合了列名。如果 $right_array 有更多列,则需要将这些列添加到最终数组中。
所以我有 2 个数组
$left_array =
Array
(
[0] => Array
(
[id] => 1
[start_on] => 2014-09-14 19:50:00
[end_on] => 2014-09-14 19:51:00
[subject] => This is a new event
[client_id] =>
[all_day_event] => 0
[event_type] => Event
[phone_call_id] => 122
)
[1] => Array
(
[id] => 2
[start_on] => 2014-09-15 05:53:00
[end_on] => 2014-09-15 06:53:00
[subject] => This is a new event
[client_id] =>
[all_day_event] => 0
[event_type] => Event
[phone_call_id] => 123
)
[2] => Array
(
[id] => 3
[start_on] => 2014-09-15 05:53:00
[end_on] => 2014-09-15 06:53:00
[subject] => This is a new event
[client_id] =>
[all_day_event] => 0
[event_type] => Event
[phone_call_id] =>
)
)
Run Code Online (Sandbox Code Playgroud)
正确的数组将如下所示
$right_array =
Array
(
[0] => Array
(
[account_id] => 1
[phone_call_id] => 122
)
[1] => Array
(
[account_id] => 2
[phone_call_id] => 123
)
)
Run Code Online (Sandbox Code Playgroud)
结果需要像这个数组
$joined_array =
Array
(
[0] => Array
(
[id] => 1
[start_on] => 2014-09-14 19:50:00
[end_on] => 2014-09-14 19:51:00
[subject] => This is a new event
[client_id] =>
[all_day_event] => 0
[event_type] => Event
[phone_call_id] => 122
[account_id] => 1
)
[1] => Array
(
[id] => 2
[start_on] => 2014-09-15 05:53:00
[end_on] => 2014-09-15 06:53:00
[subject] => This is a new event
[client_id] =>
[all_day_event] => 0
[event_type] => Event
[phone_call_id] => 123
[account_id] => 2
)
[2] => Array
(
[id] => 3
[start_on] => 2014-09-15 05:53:00
[end_on] => 2014-09-15 06:53:00
[subject] => This is a new event
[client_id] =>
[all_day_event] => 0
[event_type] => Event
[phone_call_id] =>
[account_id] =>
)
)
Run Code Online (Sandbox Code Playgroud)
该函数模拟左连接操作
//function to simulate the left join
function left_join_array($left, $right, $left_join_on, $right_join_on = NULL){
$final= array();
if(empty($right_join_on))
$right_join_on = $left_join_on;
foreach($left AS $k => $v){
$final[$k] = $v;
foreach($right AS $kk => $vv){
if($v[$left_join_on] == $vv[$right_join_on]){
foreach($vv AS $key => $val)
$final[$k][$key] = $val;
} else {
foreach($vv AS $key => $val)
$final[$k][$key] = NULL;
}
}
}
return $final;
}
Run Code Online (Sandbox Code Playgroud)
//该函数可以像这样使用,假设左侧数组中的列名与右侧数组中的列名相同
$final_array = left_join_array($left, $right, 'phone_call_id');
Run Code Online (Sandbox Code Playgroud)
//该函数可以像这样使用,假设左数组中的列名“不同但具有相同的对应值”
$final_array = left_join_array($left, $right, 'phone_call_id', 'p_c_id');
Run Code Online (Sandbox Code Playgroud)