我有一个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添加到密钥。

10-08 00:14