在PHP生成的HTML表中按字母顺序排列SQL数据
我有一个公司文件夹目录,每个文件夹都是根据公司缩写命名的。我正在使用在PHP生成的HTML表中按字母顺序排列SQL数据,php,mysql,Php,Mysql,我有一个公司文件夹目录,每个文件夹都是根据公司缩写命名的。我正在使用php创建一个表,该表将创建一个复选框,一个href到目录,然后是公司名称(它从SQL中提取) 是否有一种方法可以根据从SQL中提取的完整公司名称而不是文件夹名称按字母顺序排列表格。例如,在我的图像中,“United Stationers”按字母顺序位于其他两个文件夹的下方,但这不是因为文件夹名称按字母顺序排在第一位 这是我的PHP代码: $dir = "/var/files/companies/"; $myDirectory
php
创建一个表,该表将创建一个复选框,一个href
到目录,然后是公司名称(它从SQL
中提取)
是否有一种方法可以根据从SQL
中提取的完整公司名称而不是文件夹名称按字母顺序排列表格。例如,在我的图像中,“United Stationers”按字母顺序位于其他两个文件夹的下方,但这不是因为文件夹名称按字母顺序排在第一位
这是我的PHP
代码:
$dir = "/var/files/companies/";
$myDirectory = opendir($dir);
$blacklist = array("Review");
while(false !== ($entryName = readdir($myDirectory))) {
if (!in_array($entryName, $blacklist)) {
$dirArray[] = $entryName;}}
closedir($myDirectory);
sort($dirArray);
$indexCount = count($dirArray);
//new array here for matching short/long names
$longNames=array();
$con = new mysqli($host, $user, $password, $dbname, $port, $socket)
or die ('Could not connect to the database server' . mysqli_connect_error());
$query = "Select comp_id, short_name FROM database where vid=2";
if ($stmt = $con->prepare($query)) {
$stmt->execute();
$stmt->bind_result($comp_id, $short_name);
while ($stmt->fetch()) {
$longNames[strtolower($comp_id)]=$short_name;}
$stmt->close();}
echo ("<TABLE border=1 cellpadding=5 cellspacing=0 class= whitelinks>\n");
echo ("<TR><TH>Manufacturer's Name</TH></TR>\n");
for ($index=0; $index < $indexCount; $index++) {
if (substr("$dirArray[$index]", 0, 1) != ".") {
echo("<td>");
echo("<input type=\"checkbox\" name=\"comp[]\" value= '$dirArray[$index]' </a>");
echo(" ");
echo("<a href='/master/$dirArray[$index]'\>$dirArray[$index]</a>");
echo("- ");
if (array_key_exists($dirArray[$index], $longNames)){
$short = ($longNames[$dirArray[$index]]);
echo($short); }
echo("</td>");
echo("</TR>\n");}}
echo("</TABLE>\n");
$dir=“/var/files/companys/”;
$myDirectory=opendir($dir);
$blacklist=数组(“审阅”);
while(false!==($entryName=readdir($myDirectory))){
if(!in_数组($entryName,$blacklist)){
$dirArray[]=$entryName;}}
closedir($myDirectory);
排序($dirArray);
$indexCount=count($dirArray);
//用于匹配短/长名称的新数组
$longNames=array();
$con=newmysqli($host、$user、$password、$dbname、$port、$socket)
或die('无法连接到数据库服务器'.mysqli_connect_error());
$query=“从vid=2的数据库中选择组件id,简称”;
如果($stmt=$con->prepare($query)){
$stmt->execute();
$stmt->bind_result($comp_id,$short_name);
而($stmt->fetch()){
$longNames[strtolower($comp\u id)]=$short\u name;}
$stmt->close();}
回音(“\n”);
echo(“制造商名称”);
对于($index=0;$index<$indexCount;$index++){
if(substr(“$dirArray[$index]”,0,1)!=”){
回声(“”);
echo(我想把你的问题改成这个
$query=“从数据库中选择comp\u id,short\u name,其中vid=2 order by short\u name”;填充$longNames数组后,您可以使用回调函数对dirArray排序。在for循环之前添加此项:
usort($dirArray, function($dir1, $dir2) use ($longNames) {
$name1 = isset($longNames[$dir1]) ? $longNames[$dir1] : $dir1;
$name2 = isset($longNames[$dir2]) ? $longNames[$dir2] : $dir2;
return strcmp($name1, $name2);
});
有关usort函数的更多信息,请参阅
编辑:修复了代码中的语法错误。所以在查询中添加一个order by…
子句…@MarcB谢谢!我试过了,但不起作用,因为它只在将公司名称与相应的公司文件夹匹配后才生成公司名称。因此,按无关紧要的顺序导入。这个长名称从何而来?你从未见过er获取一个long\u name
。您只需选择short\u name,并将其填充到一个名为“long\u name”的数组中。@MarcB我用名为long name的键创建一个数组。键是$comp\u id`(相当于目录中的文件夹名称),值是$short\u name
(这是完整的公司名称)。在创建表时,它在插入键(公司缩写)时打印完整的公司名称(值)。if(array_key_存在($dirArray[$index],$longNames)){$short=($longNames[$dirArray[$index]]);echo($short);}
谢谢!我已经尝试过了,但它不起作用,因为完整的公司名称只有在匹配到相应的公司文件夹后才会生成。所以导入的顺序无关紧要。比如,在所有公司都已生成并匹配之后,是否有方法进行组织?