在foreach循环内将值和键从数据库推送到多维数组而不重复

Pushing values and keys to an multidimensional array from the database inside a foreach loop without repetitions

我正在尝试合并数据库中的两个 table,基于我的第一个,我想从另一个中检索一些值,并将它们添加到数组中。

这是我的问题:

我的第一个数据库是这样的:

FIRST TABLE:
id, credit_type, association_name, address, city, province, postal_code, country, cycle_type, cycle_begin, cycle_months

我的第二个数据库看起来像这样:

SECOND TABLE:
id, association_id, designation_name

第一个 table 中的 ID 与第二个 table 中的 association_id 匹配,因此我不需要 INNER JOIN。

我的方法如下:

<?php

public function my_function()
{

    $sql = ee()->db->select('*')->from('first_table')->get();

    $data['database'] = [];

    if ($sql->num_rows() > 0)
    {
        foreach($sql->result_array() as $row)
        {   
            $id[] = $row['id'];
            $data['database'][] = $row;
        }

    }

    foreach ($data['database'] as $key => $value) {

        $association_query = ee()->db->query("SELECT * FROM second_table WHERE id = $id");
        foreach($association_query->result_array() as $row_two)
        {
            if ($association_query->num_rows() > 0)
            {
                $data['database'][$key]['associations'][] = $row_two['designation_name'];
            }
        }
    }

    return ee()->load->view('index', $data, true);
}
?>

语法 ee()->db->select('*') 是表达式引擎准备好的语句,它等于 SELECT * FROM first_table(经过处理)。

如您所见,我尝试将数组 $id 的值传递给我的查询。问题是,一旦我像 $id[] = $row['id'] 那样推送值,我就创建了一个很好的数组,但是当我遍历我的 foreach 循环时,它会将我的数组乘以许多其他数组,所以我无法 运行 我的查询,即使我在技术上处于 foreach 循环中。

此外,一旦我尝试将查询结果推送到我的数组中,比如说更改静态 ID 中的 ID,例如 id=3,我就会得到一个非常奇怪的结果,就像重复了很多数组一样有 1 个值、2 个值、3 个值等等,当我只想将我的键 'association' 推到另一个 table.

中出现的位置时

如果你不会在SQL上这样做,至少不要多次执行第二个查询。

<?php

public function my_function()
{
    $assocs = array();
    $data = array('database' => array());

    $association_query = ee()->db->query("SELECT * FROM second_table");
    if ($association_query->num_rows() > 0) {
        foreach($association_query->result_array() as $row) {
            $assocs[$row['association_id'][] = $row['designation_name'];
        }
    }

    $sql = ee()->db->select('*')->from('first_table')->get();    
    if ($sql->num_rows() > 0)   {
        foreach($sql->result_array() as $row) {   
            $id_check = $row['id'];
            if (isset($assocs[$id_check])) {     
                $row ['associations'] = $assocs[$id_check] ;
            }
            $data['database'][] = $row;
        }

    }


    return ee()->load->view('index', $data, true);
}
?>

此致