Это потому, что в то время как при каждой итерации вы перезаписываете $ data ['state'] и $ data ['city'] ... так что только последняя итерация отправляется в представление.
Вы должны больше узнать о том, что массивы и особенно многомерные массивы работают и как их использовать.
При этом у вас есть большие проблемы для рассмотрения.Как и код очень плохо оптимизирован и будет вызывать проблемы позже.Как и в вашем коде предполагается, что идентификаторы в таблице состояний являются последовательными, что не обязательно соответствует действительности.
Вот приблизительная идея, как должен выглядеть ваш код:
модель
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;?>
Удачи