我目前正在创建一个joomla组件,我目前仍在使用菜单部分。
这是在我的模型文件中:
public function getMenu(){
$menu_id = JRequest::getInt('id');
$db = $this->getDbo();
$query = $db->getQuery(true);
$query->select('t.country_name,t.country_code, a.continent_name');
$query->from('#__vectormap_countries AS t')
->join('LEFT', '#__vectormap_continents AS a USING(continent_id)')
->where('t.published = 1');
$db->setQuery($query);
$menu_items = $db->loadObjectList();
return $menu_items;
}
在前端我有:
<?php $menus = $this->menu ?>
<?php foreach($menus as $menu): ?>
<div><?php echo $menu->continent_name ?></div>
<li id="<?php echo $menu->country_code ?>"><?php echo $menu->country_name ?></li>
<br />
<?php endforeach; ?>
然后返回:
非洲 南非
非洲 莫桑比克 或者如果我打印出阵列:
Array ( [0] => stdClass Object ( [country_name] => South Africa [country_code] => ZA [continent_name] => Africa ) [1] => stdClass Object ( [country_name] => Mozambique [country_code] => MZ [continent_name] => Africa ) ) 1
现在最后一个问题,我将如何对其进行排序,以便非洲(continent_name
)不再重复,而是让所有在其下面都有非洲大陆名单的国家?
请记住北美,这样也会发挥作用..
汇总问题 - &gt;我如何对阵列中相关大陆的国家进行排序。
任何帮助都非常感谢。
我怎么把它排序呢?
答案 0 :(得分:3)
简单的解决方法是ORDER
查询结果,然后在foreach循环中添加一些逻辑
$query->order('a.continent_name ASC, t.country_name ASC');
在你的foreach循环中,记住前一个大陆是什么
<?php
$lastcontinent = "";
foreach($menus as $k => $menu):
if($lastcontinent != $menu->continent_name){
if($k > 0){ // if this isn't the first continent
// closing tags for the previous continent
echo '</ul></div>';
}
echo '<div>'.$menu->continent_name.'</div><ul>';
}
$lastcontinent = $menu->continent_name;
echo '<li id="'.$menu->country_code.'">'.$menu->country_name.'</li>';
endforeach;
?>
</ul></div> <!-- closing tags for the last continent which hasn't been closed yet -->
答案 1 :(得分:0)
使用foreach循环创建一个新数组并创建continent_name作为键。那你就不会有重复的名字了。