PHP 中的全局文件名和组文件名
Glob and group file names in PHP
假设服务器中有一个名为 "mp3" 的文件夹,其中包含大量 mp3 文件,"a1.mp3"、"a2.mp3"、"a3.mp3"、"a4.mp3"、"ao0.mp3"、"ao2.mp3"、"ao3.mp3"、"ci1.mp3"、"ci2.mp3"等
foreach (glob('sound/*.mp3') as $filename) {
if (!in_array($filename,$exclude_files)) {
$outputtext .= "<p>".preg_replace('/\.[^.\s]{3,4}$/', '', basename($filename))."</p>";
}
}echo $outputtext;
我的源码如上,当前结果为:
a1
a2
a3
ao0
ao2
ao3
ci1
ci2
但我想要的结果是将所有相同的模式分组如下:
一个 - 123
ao - 023
ci - 12
谢谢大家的回复。
foreach (glob($path.'*.mp3') as $filename) {
if (!in_array($filename,$exclude_files)) {
if (preg_match('/[0-9]/', $filename, $matches, PREG_OFFSET_CAPTURE)) {
// Starting after "sound/", so the starting position is 6
$filenamestr[$n] = substr($filename, 6, $matches[0][1]-6+1);
$n++;
}
}
}
$totalfiles = $n--;
$mp3 = "";
$o = 0;
$p = 0;
for ($l = 0; $l < $totalfiles; $l++) {
if (substr($filenamestr[$l], 0, strlen($filenamestr[$l])-1) == substr($filenamestr[$l-1], 0, strlen($filenamestr[$l-1])-1)) {
// Connect file names to an array when current file name is the same as previous one
$p++;
$mp3file[$o][$p] = substr($filenamestr[$l], -1);
$mergemp3file[$o] .= $mp3file[$o][$p];
} else {
// Produce another array for file name when current file name is different from previous one
$o++;
$p = 0;
$mp3file[$o][$p] = substr($filenamestr[$l], 0, strlen($filenamestr[$l])-1)." - ".substr($filenamestr[$l], -1);
// Collect sound files for each file name
$mergemp3file[$o] .= $mp3file[$o][$p];
}
}
// Generate merged sound files for each file name
$totalmp3 = $o--;
for ($o = 1; $o < $totalmp3; $o++) {
$outputtext .= "<br/>".$mergemp3file[$o].chr(13);
}
假设服务器中有一个名为 "mp3" 的文件夹,其中包含大量 mp3 文件,"a1.mp3"、"a2.mp3"、"a3.mp3"、"a4.mp3"、"ao0.mp3"、"ao2.mp3"、"ao3.mp3"、"ci1.mp3"、"ci2.mp3"等
foreach (glob('sound/*.mp3') as $filename) {
if (!in_array($filename,$exclude_files)) {
$outputtext .= "<p>".preg_replace('/\.[^.\s]{3,4}$/', '', basename($filename))."</p>";
}
}echo $outputtext;
我的源码如上,当前结果为:
a1
a2
a3
ao0
ao2
ao3
ci1
ci2
但我想要的结果是将所有相同的模式分组如下:
一个 - 123
ao - 023
ci - 12
谢谢大家的回复。
foreach (glob($path.'*.mp3') as $filename) {
if (!in_array($filename,$exclude_files)) {
if (preg_match('/[0-9]/', $filename, $matches, PREG_OFFSET_CAPTURE)) {
// Starting after "sound/", so the starting position is 6
$filenamestr[$n] = substr($filename, 6, $matches[0][1]-6+1);
$n++;
}
}
}
$totalfiles = $n--;
$mp3 = "";
$o = 0;
$p = 0;
for ($l = 0; $l < $totalfiles; $l++) {
if (substr($filenamestr[$l], 0, strlen($filenamestr[$l])-1) == substr($filenamestr[$l-1], 0, strlen($filenamestr[$l-1])-1)) {
// Connect file names to an array when current file name is the same as previous one
$p++;
$mp3file[$o][$p] = substr($filenamestr[$l], -1);
$mergemp3file[$o] .= $mp3file[$o][$p];
} else {
// Produce another array for file name when current file name is different from previous one
$o++;
$p = 0;
$mp3file[$o][$p] = substr($filenamestr[$l], 0, strlen($filenamestr[$l])-1)." - ".substr($filenamestr[$l], -1);
// Collect sound files for each file name
$mergemp3file[$o] .= $mp3file[$o][$p];
}
}
// Generate merged sound files for each file name
$totalmp3 = $o--;
for ($o = 1; $o < $totalmp3; $o++) {
$outputtext .= "<br/>".$mergemp3file[$o].chr(13);
}