Php 将值和键从foreach循环内的数据库推送到多维数组中,无需重复

Php 将值和键从foreach循环内的数据库推送到多维数组中,无需重复,php,arrays,multidimensional-array,foreach,push,Php,Arrays,Multidimensional Array,Foreach,Push,我试图从一个数据库中组合两个表,并基于我的第一个表,我想从另一个表中检索一些值,并将它们添加到一个数组中 我的问题是: 我的第一个数据库如下所示: FIRST TABLE: id, credit_type, association_name, address, city, province, postal_code, country, cycle_type, cycle_begin, cycle_months SECOND TABLE: id, association_id, designat

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

我的问题是:

我的第一个数据库如下所示:

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
我的第二个数据库是这样的:

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
第一个表中的id与第二个表中的关联\u id匹配,因此不需要内部联接

我的做法如下:

<?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);
}
?>

sintax
ee()->db->select('*')
是表达式引擎中准备好的语句,它等于从第一个表中选择*(已清理)

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


另外,当我尝试在数组中推送查询结果时,比如在静态id中更改id,例如id=3,我得到了一个非常奇怪的结果,就像许多数组重复使用1值、2值、3值等等,当我只想在另一个表中显示的位置推送键“关联”时。

如果您不想在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);
}
?>


关于

你想要的结果是什么?我不清楚你想要实现什么。这段代码有几个地方不对劲。首先,插值
$id[]
只会在字符串中打印
数组
,查询将永远无法完成。其次,在调用
->result\u array()
之前,应该首先检查
->num\u rows()
。第三,最好的办法是将所有行提取到一个变量中,只分配
$data['database'][$key]['association']=$allRows
,而不是通过foreach循环;我想添加一个字段(一个键),它是同一数组中的另一个数组:$data['database'][$key]['associations'][]=$row_two['designation_name'];类似于:$data['database']=array()->value:id=1,credit_type=2,association_name=something,address,city=someaddress,等等,直到最后一个值,可能类似于association=other_array();伟大的解决方案!我实际上是在尝试回显我的变量,但我收到了一个建议:隐藏值这将产生->数组到字符串的转换,但我不太明白为什么,因为回显在foreach循环中。。你知道为什么吗?$item[“associations”]是一个数组,它包含该“association\u id”的所有“designation\u name”(在这种情况下应该不止一个)。您可以使用
echo内爆(',',$item['associations'])
来枚举它们