Php 带有codeigniter的多级菜单
我正在尝试创建一个多级列表。我有两张桌子“州”和“市”。城市表有一个外键“state_id”,它是“state”表的主键。我想展示每个州,每个州下都有多个城市。但当我运行代码时,只会显示数据库中最后一个存储的状态及其下的城市。我希望Db中的所有州和与之对应的城市都出现 我的控制器的一部分: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
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;?>