【发布时间】:2021-01-04 20:51:29
【问题描述】:
这是第一个问题:
我有两个关联数组,一个包含销售人员,一个包含客户。
$salesPersons = array(
array(
"id" => "1",
"name" => "Mr Smith",
"email" => "mrsmith@email.com",
"clients" => array()
),
array(
"id" => "2",
"name" => "James Bond",
"email" => "jamesbond@email.com",
"clients" => array()
)
);
$clients = array(
array(
"id" => "1",
"name" => "Lucifer Enterprises",
"salesPersonId" => "1"
),
array(
"id" => "2",
"name" => "Charlies Chocolate Factory",
"salesPersonId" => "1"
),
array(
"id" => "3",
"name" => "Geckos Investments",
"salesPersonId" => "2"
),
);
我想通过 ID 将 $salesPersons['id'] 映射到 clients['salesPersonId'] 并返回一个多维关联数组,如下所示:
$result_i_want = array(
array(
"id" => "1",
"name" => "Mr Smith",
"email" => "mrsmith@email.com",
"clients" => array(
array(
"id" => "1",
"name" => "Lucifer Enterprises",
),
array(
"id" => "2",
"name" => "Charlies Chocolate Factory",
),
)
),
array(
"id" => "2",
"name" => "James Bond",
"email" => "jamesbond@email.com",
"clients" => array(
array(
"id" => "3",
"name" => "Geckos Investments",
),
)
)
);
我对第一个问题的解决方案
我已经使用嵌套的 foreach-loops 和 array_push 解决了这个问题
$result = array();
foreach ($clients as $c_record) {
foreach ($salesPersons as $s_record) {
if ($c_record['salesPersonId'] == $s_record['id']) {
array_push($s_record['clients'], array(
"id" => $c_record['id'],
"name" => $c_record['name']
));
array_push($result, $s_record);
}
}
}
剩下的问题
这个解决方案似乎效率不高。 对于每个客户记录,我都会检查所有销售人员以查看是否匹配。我认为计算的数量是:
no. of clients * no. of sales persons
我有一个庞大的数据库,还需要通过将项目映射到客户并将可交付成果映射到项目来添加更多维度。我认为这可能会造成问题。
问题
有没有更有效的方法来获得相同的结果?
【问题讨论】:
-
这些数组来自哪里?这两个是独立的查询结果吗?
-
这是来自 Web 应用程序 API 的两个单独的 GET 请求。我得到我解码为关联数组的 JSON 数据