我有下面的代码输出目录中的文件名。当文件的第一个字母发生变化时(例如从A到B),我想用一个额外的行空格按字母顺序分隔文件名。有任何想法吗?谢谢。
$dirs = scandir("Dir");
foreach($dirs as $file)
{
if (($file == '.')||($file == '..'))
{
}
elseif (is_dir($tdir.'/'.$file))
{
filesInDir($tdir.'/'.$file);
}
else
{
echo $file."<br>";
}
}
答案 0 :(得分:2)
您只需监控每个文件名的第一个字符即可。您可以使用数组语法访问字符串的单个字符,例如$string[0]
作为第一个字符:
$dirs = scandir("Dir");
$char = null;
foreach($dirs as $file)
{
if (($file == '.')||($file == '..'))
{
}
elseif (is_dir($tdir.'/'.$file))
{
filesInDir($tdir.'/'.$file);
}
else
{
if ($file[0] != $char && $char !== null) echo "<br>";
echo $file."<br>";
$char = $file[0];
}
}
答案 1 :(得分:0)
您可以通过在循环结束时存储先前的文件名来解决此问题,然后使用strncasecmp
将其第一个字符与当前文件的第一个字符进行比较。如果返回值!= 0,则字符不同;因此,添加了额外的BR标签。
$dirs = scandir("Dir");
foreach($dirs as $file)
{
if (($file == '.')||($file == '..'))
{
}
elseif (is_dir($tdir.'/'.$file))
{
filesInDir($tdir.'/'.$file);
}
else
{
echo $file."<br>";
if (strncasecmp($file, $previousFile, 1)) echo "<br>";
}
$previousFile = $file;
}
答案 2 :(得分:0)
有点黑客,但是如果你的on * nix:
ls -al | awk '{print $9}'
将按字母顺序返回目录内容。