【问题标题】:How sort $item values for title inside a foreach如何在 foreach 中对标题的 $item 值进行排序
【发布时间】:2019-07-26 10:30:07
【问题描述】:

我会按标题排序显示值。它仅显示按 page_order 排序的值,我将 Page_model->get_pages() order_by('page_order') 编辑为 order_by('title') 但它继续按 page_order 显示。我似乎无法找到关于这个话题的答案。如何在以下代码中按标题对值进行排序:

<?php 
    foreach ($menu_links as $item): 
        if ($item['parent_id'] != "0" && $item['subcat_recip_id'] != "" ):
?>

<?php 
            $valuesub = explode(",",$item['subcat_recip_id']);
            foreach($valuesub as $dt):
                if (html_escape("$dt") == html_escape("$subrecp")):
?>
       <li><a href="<?php echo html_escape($item["slug"]);?>?subrecp=<?php echo html_escape("$subrecp"); ?>"><?php echo html_escape($item["title"]) ?></a></li> 
<?php 
                endif; 
            endforeach;
?>
<?php 
        endif; 
    endforeach; 
?>

配方模型

* recipes Page
 */
public function recipes()
{
    $this->load->model('page_model');
    $data['page'] = $this->page_model->get_page('recipes');
    if ($data['page']->page_active == 0) {
        $this->error_404();
    } else {
        $data['title'] = get_page_title($data['page']);
        $data['description'] = get_page_description($data['page']);
        $data['keywords'] = get_page_keywords($data['page']);
        $data['page_settings'] = get_page_settings();
        $data['menu_links'] = $this->navigation_model->get_menu_links();
    $this->load->view('partials/_header', $data);
    $this->load->view('recipes', $data);
    $this->load->view('partials/_footer');
    }
}

Navigation_model->get_Menu_links

 public function get_menu_links()
 {
     $menu = array();
     $pages = $this->page_model->get_pages();
     if (!empty($pages)) {
        foreach ($pages as $page) {
            $page_type = "page";
            if (!empty($page->link)) {
                $page_type = "link";
            }
            $item = array(
                'order' => $page->page_order,
                'id' => $page->id,
                'lang_id' => $page->lang_id,
                'parent_id' => $page->parent_id,
                'subcat_recip_id' => $page->subcat_recip_id,
                'title' => $page->title,
                'slug' => $page->slug,
                'link' => lang_base_url() . $page->slug,
                'type' => $page_type,
                'location' => $page->location,
                'visibility' => $page->page_active,
                        'subcat_recip_id' => $page->subcat_recip_id,
            );

            if ($page_type == "link") {
                $item["link"] = $page->link;
            }
            if ($page->slug == "index") {
                $item["link"] = lang_base_url();
            }

            array_push($menu, $item);
        }
    }

    $categories = $this->category_model->get_categories();
    if (!empty($categories)) {
        foreach ($categories as $category) {
            $item = array(
                'order' => $category->category_order,
                'id' => $category->id,
                'lang_id' => $category->lang_id,
                'parent_id' => $category->parent_id,
                'title' => $category->name,
                'slug' => $category->slug,
                'link' => lang_base_url() . "category/" . $category->slug,
                'type' => "category",
                'location' => "header",
                'visibility' => $category->show_on_menu,
                        'subcat_recip_id' => $page->subcat_recip_id,
            );
            array_push($menu, $item);
        }
    }

    sort($menu);
    return $menu;
}

Page_model->get_pages

//get pages
public function get_pages()
{
    $this->db->where('pages.lang_id', $this->selected_lang->id);
    $this->db->order_by('page_order');
    $query = $this->db->get('pages');
    return $query->result();
}

【问题讨论】:

    标签: php mysql codeigniter sql-order-by codeigniter-3


    【解决方案1】:

    你可以使用ksort()函数。
    参考here (offical documentation)。

    【讨论】:

    • 在这种情况下 ksort() 不起作用。我尝试了所有可用的功能(排序、排序),但显然,我不能单独完成。对不起。
    【解决方案2】:

    首先尝试从get_menu_links() 中删除sort($menu);。否则,无论你在get_pages() 中得到什么顺序,都会被排序破坏。

    在任何一种情况下,您都可以使用usort,它允许使用自定义比较函数对数组进行排序。

    比较函数必须返回一个小于、等于或 如果第一个参数被认为是大于零 分别小于、等于或大于秒。

    usort($menu_links, function($a, $b) {
      return strcmp($a['title'], $b['title']);
    });
    
    

    【讨论】:

    • 太棒了!删除 sort($menu) 它可以工作,但是主菜单不是按“page_order”排序的。使用 usort,不删除 sort($menu) 一切都很好,菜单按 page_order 排序,值按标题显示。谢谢老哥!
    猜你喜欢
    • 1970-01-01
    • 2023-01-11
    • 1970-01-01
    • 1970-01-01
    • 2020-05-06
    • 2017-12-28
    • 2020-01-27
    • 1970-01-01
    • 2018-10-20
    相关资源
    最近更新 更多