【发布时间】:2020-10-28 22:00:42
【问题描述】:
我无法使用此 PHP 代码获得所需的结果。
我有一个名为 audio 的文件夹,其中有 2 个 mp3 文件,如图 Audio folder contents
我在 mp3 文件中保留了歌手姓名的简写形式,例如 RI 用于 RIHANA,MC 用于 MILEY CYRUS。
问题是我想要扫描音频文件夹并检查播放列表并根据所选播放列表和歌曲编号查找 mp3 文件的代码。然后它会以完整的形式显示可用的歌手姓名(我也为此做了一个单独的函数),但我无法获得歌手的完整姓名。它反复为名为 audio 的文件夹中可用的所有不同音频文件提供相同的歌手名称。它给出了准确的短名称,但不是全名。你可以在图片中看到。 Result of PHP code when executed
所以请帮帮我。
主要是我需要函数之外的结果。不像我所做的那样在里面。
<?php
# a slightly modified version of the original function
function singeractualname( $ssn ) {
switch( $ssn ){
case 'MC':return 'Miley Cyrus';
case 'RI':return 'Rihanna';
default:return 'Singer name not available !!!';
}
}
function outputFiles( $path, $song, $dir ){
$output=[];
if( file_exists( realpath( $path ) ) ){
$dirItr=new RecursiveDirectoryIterator( $path, RecursiveDirectoryIterator::KEY_AS_PATHNAME );
foreach( new RecursiveIteratorIterator( $dirItr, RecursiveIteratorIterator::CHILD_FIRST ) as $obj => $info ) {
if( $info->isFile() ){
$pttn=sprintf( '@%s-\w+\.\w+@i', $song );
preg_match( $pttn, $info->getFileName(), $col );
if( !empty( $col ) ){
foreach( $col as $file ){
$ext=pathinfo( $file, PATHINFO_EXTENSION );
list( $int, $cat, $code )=explode( '-', pathinfo( $file, PATHINFO_FILENAME ) );
$output[]=(object)[
'ext' => $ext,
'code' => $code,
'name' => singeractualname( $code ),
'file' => $dir . '/' . $info->getFileName(),
'index' => $int,
'category' => $cat
];
}
}
}
}
}
array_unshift( $output, (object)[
'ext' => 'html',
'code' => false,
'name' => 'Home',
'file' => '/homepage.html',
'index' => false,
'category' => false
]);
return $output;
}
$PlaylistName = 'ROCK';
$songNumber = 1;
$root='';
$dir='audio';
$path=$root . $dir;
$song=sprintf( '%s-%s', $songNumber, $PlaylistName );
$arr=outputFiles( $path, $song, $dir );
foreach( $arr as $obj ) {
printf(
'<link rel="stylesheet" type="text/css" href="audio/css/main.css"><div class="wrap-login100 p-l-85 p-r-85 p-t-55 p-b-55"><br><br><audio width="100%" height="100%" controls="controls" src="%1$s" controlslist="nodownload" type="audio/mp3" style="visibility: visible;">
</audio><br /><font size="4" color="#000080"><b>Singer : <font size="4" color="#B22222">%2$s</b></font></font></div>',
$obj->file,
$obj->name
);
}
【问题讨论】:
-
if ($singershortname = "MC")正在分配一个值。要进行比较,请使用两个或三个等号:if ($singershortname == "MC")。所以这里发生的情况是,您在第一个 if 中将值分配给“MC”,这将始终评估为 true(因为它是一个真实值)并且您的elseif和else将永远不会被执行。您还可以在比较$singershortname时传入$shortname,所以它应该是:if ($shortname == 'MC')和elseif ($shortname == 'RI') -
先生,您可以编辑函数并为我写清楚,确切的函数应该是什么。我没有得到你请.......问题是我需要一个函数,该函数为该函数从音频文件名为歌手姓名生成的短代码提供全名
-
我只是在谈论你的函数
singeractualname()。要为变量分配值,请执行$variable = 'value';(一个=)。要比较一个值,您可以使用$variable == 'value'(两个==或三个===)。因此,在您的函数中的if-statements 中,您不是比较 变量与值,而是分配 变量一个值。此外,您的函数签名是function singeractualname($shortname),这意味着它是您需要在函数中使用的$shortname变量,而不是$singershortname。 -
谢谢先生!!它现在工作了:) 但是先生,我还想问一件事是如何生成一个带有这些歌手姓名的 html(带有指向 mp3 文件的超链接)??
-
不确定我是否关注您,但如果问题是如何将名称作为文件链接获取,那么请执行以下操作:
$singerfullname = '<a href="link-to-mp3">Miley Cyrus</a>';,其他艺术家也一样。如果您现在在页面上回显该变量,它将是一个链接。
标签: php function file directory glob