首页 > 解决方案 > 使用 $obj->select 对从数据库中提取的数组进行排序

问题描述

我从另一个开发人员那里继承了一个项目,该项目有一堆从数据库中提取信息的下拉菜单。设置方式如下:

$agent_list = $obj->select(TABLEPRIFIX.'agent', '*', ['status' =>1 ]);

如果我没看错,它基本上是在说“选择表'the_agent'并抓取状态为1的所有内容”。该部分工作正常,但下拉菜单如下:

<div class="form-group">
    <label>Agent</label>
    <select name="agent_id" id="" class="form-control" required>
        <option value="">Select</option>
        <?php
        foreach ($agent_list as $agent) 
        {
            ?>
            <option value="<?php echo $agent['id']; ?>" <?php echo ($agent['id'] == $agent[0]['agency_id']) ? 'selected': '' ?> ><?php echo $agent['name']; ?></option>

将按非字母顺序显示所有名称。这些行有一个作为主键的 id 号,因此这就是创建顺序的原因,但是我希望能够按“名称”列对数组进行排序,以便它按字母顺序显示。通过我的在线研究,我看到并尝试了许多方法,例如使用 JavaScript、使用 order() 和 ORDER BY。ORDER BY 似乎是完成此任务的最简单和最顺畅的方法,但我无法获得它或任何其他方法来使用 $agent_list 的设置方式。是否可以使用 ORDER BY 的设置方式,还是我需要使用其他方法?

标签: javascriptphphtmlsqlforms

解决方案


您需要检查$obj设置的位置,它可能是 db 查询类的实例。该类的构造函数(或返回分配给 的值的函数的定义$obj)应提供信息,您可以如何指定ORDER_BY要包含在 DB 查询中的子句(如果有的话),这是首选的方式。

如果这不是一个选项,请使用自定义排序函数对 php 数组进行排序:

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

有关详细信息,请参阅 PHP 手册中的 usort。未经测试的代码。


推荐阅读