Php 带有codeigniter的多级菜单

Php 带有codeigniter的多级菜单,php,codeigniter,while-loop,Php,Codeigniter,While Loop,我正在尝试创建一个多级列表。我有两张桌子“州”和“市”。城市表有一个外键“state_id”,它是“state”表的主键。我想展示每个州,每个州下都有多个城市。但当我运行代码时,只会显示数据库中最后一个存储的状态及其下的城市。我希望Db中的所有州和与之对应的城市都出现 我的控制器的一部分: function index(){ $result = $this->db->count_all('state'); $id=1; while ($id<=$res

我正在尝试创建一个多级列表。我有两张桌子“州”和“市”。城市表有一个外键“state_id”,它是“state”表的主键。我想展示每个州,每个州下都有多个城市。但当我运行代码时,只会显示数据库中最后一个存储的状态及其下的城市。我希望Db中的所有州和与之对应的城市都出现

我的控制器的一部分:

function index(){
    $result = $this->db->count_all('state');

    $id=1;
    while ($id<=$result){
        $data ['state'] = $this->state_model->stateid($id);  
        $data['city']=$this->state_model->statec($id);
        $id++;
    } 
    $this->load->view('state_view',$data);
}
观点:

<?php foreach($state as $row):?>
    <h4><?php echo $row->statename;?></h4>
    <?php foreach($city as $row):?>
        <?php echo $row->cityname; ?></br></br></br>
    <?php endforeach;?></br></br>
<?php endforeach;?></br></br>









这是因为在此期间,每次迭代都会覆盖$data['state']和$data['city']。。。因此,只有最后一次迭代被发送到视图

您应该更多地了解什么数组,尤其是多维数组,以及如何使用它们

正如你所说,你还有更大的问题要考虑。这段代码优化得非常糟糕,以后会出现问题。与您的代码一样,假设状态表中的ID是连续的,这不一定是真的

下面是您的代码应该是什么样子的粗略想法:

模型 控制器 视图:

祝你好运

<?php foreach($state as $row):?>
    <h4><?php echo $row->statename;?></h4>
    <?php foreach($city as $row):?>
        <?php echo $row->cityname; ?></br></br></br>
    <?php endforeach;?></br></br>
<?php endforeach;?></br></br>
function get_cities(){

  $states = $this->db->get('state');

  foreach ($states->result() as $state){
    $cities = $this->db->get_where('city', array('state_id', $state->id));
    $state->cities = $cities->result();
  }

  return $states;
}
function index(){
  $this->load->model('state_model);
  $data['states'] = $this->state_model->get_cities();
  $this->load->view('states/index, $data);
}
<?php foreach($states as $state):?>
  <h4><?php echo $state->statename;?></h4>
  <?php  foreach($state->city as $city):?>
    <?php echo $city->cityname; ?>
  <?php endforeach;?>
<?php endforeach;?>