我有一个MySQL查询,它将来自transcriber表的数据与来自列出其证书的表的数据组合在一起。一些转录者可能有多个证书。
我发现有些抄写员会为他们所拥有的每一个证书都拿出一次,因为他们应该这样做。对于其他转录器,第一个数组值被第二个数组值覆盖。在我看来,如果一个转录者有两个证书,一个证书是1,另一个证书是3,那么3将覆盖1。如果certId为2、4、5、6或7(除了1和3之外的任何组合),则不会发生这种情况。我已经没有办法了。如果有人能帮忙,将不胜感激。
这是我的代码:
public function getTranscribersAndTheirCertificationsList() {
$Q = $this->read_db->query('SELECT t.*, tc.certId, tc.regNum, c.certName FROM transcriber t
JOIN transcribercertifications tc ON t.id = tc.tid
JOIN certifications c ON tc.certId = c.id');
return $Q->result_array();
}
下面的代码接受从上面传入的数据并对其进行处理:
$list = $this->MTranscriber->getTranscribersAndTheirCertificationsList();
foreach ($list as $t) {
$key = explode(' ', trim($t['name']));
$key = preg_replace('/[()]/','', $key);
$key = array_reverse($key);
$key = implode(' ', $key) . $t['id'];
$t['cet'] = $t['certName'] . ($t['regNum'] ? '-' . $t['regNum'] : '');
if ($t['certId'] == 2 || $t['certId'] == 5) {
$data['cetlist']['tta'][$key] = $t;
} else {
$data['cetlist']['cet'][$key] = $t;
}
}
if (!empty($data['cetlist']['cet'])) {
ksort($data['cetlist']['cet']);
}
if (!empty($data['cetlist']['tta'])) {
ksort($data['cetlist']['tta']);
}
如果我回音$t,数据看起来不错。出于某种原因,当$t被添加到else分支中的每个数组时,第一个值在certId=1和certId=3的情况下被覆盖。我试过使用array_push和array_merge,但也没有得到我需要的结果。
编辑以下是一些经过清理的数据:
Array
(
[Doe John9] => Array
(
[id] => 9
[name] => John Doe
[email] =>
[homephone] =>
[cellphone] =>
[address1] => 1 Main Street
[address2] =>
[city] => ABC
[stateregion] =>
[zipcode] => 99999
[cet] => CET-485
[certId] => 3
[regNum] => 485
[certName] => CET
)
)
如果John Doe有另一个certId为1(CER)的证书,它会被上面的数据覆盖,而我只得到上面的一个。我应该买一张CER和一张CET。
最佳答案
用于将转录器保存到数组的密钥与certId的独立项相同。因此,您将始终覆盖以前的条目。
如果要添加多个版本的转录器,则应将certId添加到密钥。