Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP生成的HTML表中按字母顺序排列SQL数据_Php_Mysql - Fatal编程技术网

在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);}
谢谢!我已经尝试过了,但它不起作用,因为完整的公司名称只有在匹配到相应的公司文件夹后才会生成。所以导入的顺序无关紧要。比如,在所有公司都已生成并匹配之后,是否有方法进行组织?