我有一个公司文件夹目录,每个文件夹都是根据公司缩写命名的。我正在使用php
创建一个表,该表为目录创建checkbox
,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");
答案 0 :(得分:0)
我认为将您的查询更改为此
$ query =&#34;选择comp_id,short_name FROM数据库,其中vid = 2 order by short_name&#34 ;;
答案 1 :(得分:0)
一旦填充了$ 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功能的详细信息,请参阅http://php.net/manual/en/function.usort.php。
编辑:修复了代码中的语法错误。