0

我目前正在创建一个 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不重复非洲(),而是将所有具有非洲大陆名称的国家都列在其下方?

请记住,北美和其他地区也将发挥作用。

总结问题->我将如何对数组中喜欢的相关大陆下方的国家进行排序。

非常感谢任何帮助。

我将如何对其进行排序

4

2 回答 2

2

简单的解决方法是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 -->
于 2013-04-29T11:04:38.580 回答
0

使用 foreach 循环并创建一个新数组并创建continent_name 作为键。这样你就不会有重复的名字了。

于 2013-04-29T11:00:31.953 回答