如何在 PHP 中创建按字母顺序排列的下拉菜单



我正在尝试重写此代码,以便下拉菜单按字母顺序排列:

$activeProjectDropdown.="<option value=''>Select Project</option>";
$getInfo = "SELECT id, customer, job_name, haul_info 
FROM dispatch_jobs 
WHERE (:mydate BETWEEN delivery_date AND delivery_date_end) 
ORDER BY customer, job_name";
$result=DB::run($getInfo, ['mydate' => $myDate]);
while($row=$result->fetch(PDO::FETCH_BOTH)) {
if(!empty($row['haul_info'])) {
$haulinfo = "($row[haul_info])";
}else{
$haulinfo = "";
}
if($checkit == $row['id']){
$woot = 'selected=selected';
}else{
$woot = '';
}
$customerName = pdo_getName('name', 'customer', "$row[customer]");
$activeProjectDropdown.="<option value='$row[customer]|$row[id]' $woot>$customerName $haulinfo</option>n";
}

在此代码中,查询从数据库中返回一些行,其中 customer 是一个数字代码,它不按任何字母顺序排列。 在代码的更下方,调用一个名为pdo_getName的函数,该函数从$row['customer']中获取customername表和 id 的列并查询数据库,返回客户的字符串化名称。 因为直到稍后循环才检索到该名称,所以我很难找到一种可以按字母顺序排列$activeProjectDropdown的方法。 我尝试将$customerName和下拉代码放入关联数组中,然后按$customerName排序并将所有内容连接成一个字符串,但这不起作用,因为存在重复键。 沿着同样的路径,我可能会有一个嵌套数组,但我认为一定有一个更简单的解决方案,我错过了。 感谢您的帮助!

编写一个 JOIN 查询并在一个查询中获取所有数据,然后您可以按照我认为您要求的那样对客户名称进行排序。

这将提高性能并简化代码。

$getInfo = "SELECT dj.id, dj.customer, dj.job_name, dj.haul_info 
c.name
FROM dispatch_jobs dj
LEFT JOIN customer c ON c.id = dj.customer
WHERE (:mydate BETWEEN dj.delivery_date AND dj.delivery_date_end) 
ORDER BY c.name, dj.job_name";
$result=DB::run($getInfo, ['mydate' => $myDate]);
while($row=$result->fetch(PDO::FETCH_BOTH)) {
if(!empty($row['haul_info'])) {
$haulinfo = "($row[haul_info])";
}else{
$haulinfo = "";
}
if($checkit == $row['id']){
$woot = 'selected=selected';
}else{
$woot = '';
}
$activeProjectDropdown.="<option value='$row[customer]|$row[id]' $woot>$row[name] $haulinfo</option>n";
}

试试这个:

SELECT ... ORDER BY customer ASC, job_name

这将首先按客户(升序(对所有内容进行排序,然后在两行或更多行的客户字段相等时按job_name(升序,这是默认值(对所有内容进行排序。

更多信息在这里

最新更新