我正在用PHP创建自动索引。 我正在尝试对文件夹中的文件数组进行排序。这是我的代码的一部分:
<?php
$cmd = shell_exec("ls -m");
$cmdsk = str_replace(", ","\n","$cmd");
$divide = explode("\n", $cmdsk);
array_pop($divide);
foreach( $divide as $path ) {
echo "<th class=\"icon\"><img src=\"/beta/.res/save.png\"></th><th><a href=\"{$path}\">{$path}</a></th></tr>";
}
?>
ls -m的输出如下:
file1, file2, file3, etc...
但是由于某种原因,在此代码创建的数组中,诸如“ file1,file2”之类的变量会随机出现。我解决了这个问题。唯一令我困扰的是,随机变量如“ file3”经常出现。它的末尾带有逗号,因此它“损坏”了文件名和文件路径(可能已损坏)。
所以我的问题是,如何删除出现在数组变量末尾的那些随机逗号?
干杯。
答案 0 :(得分:1)
ls -m
的输出在同一行的名称之间带有逗号,后跟一个空格,并且在每行的末尾也带有一个逗号,后跟一个换行符。您要用换行符替换逗号空间,但要保持逗号换行符不变。您需要同时替换两者。
$cmdsk = str_replace([", ", ",\n"],"\n","$cmd");
我不确定为什么要解析ls
而不是使用PHP的内置目录列表功能,如glob()
。您也可以使用ls -1
代替ls -m
,这会将每个文件名放在自己的行中。
答案 1 :(得分:0)
$path = trim($path);
if ($path[strlen($path) - 1] == ',') $path = substr($path, 0, -1);
不是最漂亮的代码,但是它将删除$ path之前和之后的所有空格,检查最后一个字符是否为逗号,如果是,则将其删除。
您也可以将str_replace仅使用逗号而不使用空格,例如:
$cmdsk = str_replace(",", "\n", $cmd);
或直接将explode()与逗号一起使用。