-1

我正在使用下面的代码打印 MP2 文件的 id3 标签,但输出以这种形式出现

Array ( [FileName] => 4.mp3 [TAG] => ID3 [Version] => 3.0 [Title] => &Bahut Khubsurat Ghazal (mr-Jatt.Com) [Album] => 1Loverz Choice (A Khubsurat Ghazal) (www.mzc.in) [Author] => DJ Badboy (mr-Jatt.Com) [Track] => (www.mzc.in) ) 

但我想要这样的简单输出

文件名 4.mp3 标题 Bahut Khubsurat Ghazal (mr-Jatt.Com) 专辑 1Loverz Choice (A Khubsurat Ghazal) (www.mzc.in) 作者 DJ Badboy (mr-Jatt.Com) 曲目 (www.mzc.in)

我的代码是

print_r(tagReader("4.mp3"));
// ------------------------------
function tagReader($file) {
    $id3v23 = array("TIT2","TALB","TPE1","TRCK","TDRC","TLEN","USLT");
    $id3v22 = array("TT2","TAL","TP1","TRK","TYE","TLE","ULT");
    $fsize = filesize($file);
    $fd = fopen($file, "r");
    $tag = fread($fd, $fsize);
    $tmp = "";
    fclose($fd);
    if (substr($tag, 0, 3) == "ID3") {
        $result['FileName'] = $file;
        $result['TAG'] = substr($tag, 0, 3);
        $result['Version'] = hexdec(bin2hex(substr($tag, 3, 1))) . "." . hexdec(bin2hex(substr($tag, 4, 1)));
    }
    if ($result['Version'] == "4.0" || $result['Version'] == "3.0") {
        for($i = 0; $i < count($id3v23); $i ++) {
            if (strpos($tag, $id3v23[$i] . chr(0)) != FALSE) {
                $pos = strpos($tag, $id3v23[$i] . chr(0));
                $len = hexdec(bin2hex(substr($tag, ($pos + 5), 3)));
                $data = substr($tag, $pos, 9 + $len);
                for($a = 0; $a < strlen($data); $a ++) {
                    $char = substr($data, $a, 1);
                    if ($char >= " " && $char <= "~")
                        $tmp .= $char;
                }
                if (substr($tmp, 0, 4) == "TIT2")
                    $result['Title'] = substr($tmp, 4);
                if (substr($tmp, 0, 4) == "TALB")
                    $result['Album'] = substr($tmp, 4);
                if (substr($tmp, 0, 4) == "TPE1")
                    $result['Author'] = substr($tmp, 4);
                if (substr($tmp, 0, 4) == "TRCK")
                    $result['Track'] = substr($tmp, 4);
                if (substr($tmp, 0, 4) == "TDRC")
                    $result['Year'] = substr($tmp, 4);
                if (substr($tmp, 0, 4) == "TLEN")
                    $result['Lenght'] = substr($tmp, 4);
                if (substr($tmp, 0, 4) == "USLT")
                    $result['Lyric'] = substr($tmp, 7);
                $tmp = "";
            }
        }
    }
    if ($result['Version'] == "2.0") {
        for($i = 0; $i < count($id3v22); $i ++) {
            if (strpos($tag, $id3v22[$i] . chr(0)) != FALSE) {
                $pos = strpos($tag, $id3v22[$i] . chr(0));
                $len = hexdec(bin2hex(substr($tag, ($pos + 3), 3)));
                $data = substr($tag, $pos, 6 + $len);
                for($a = 0; $a < strlen($data); $a ++) {
                    $char = substr($data, $a, 1);
                    if ($char >= " " && $char <= "~")
                        $tmp .= $char;
                }
                if (substr($tmp, 0, 3) == "TT2")
                    $result['Title'] = substr($tmp, 3);
                if (substr($tmp, 0, 3) == "TAL")
                    $result['Album'] = substr($tmp, 3);
                if (substr($tmp, 0, 3) == "TP1")
                    $result['Author'] = substr($tmp, 3);
                if (substr($tmp, 0, 3) == "TRK")
                    $result['Track'] = substr($tmp, 3);
                if (substr($tmp, 0, 3) == "TYE")
                    $result['Year'] = substr($tmp, 3);
                if (substr($tmp, 0, 3) == "TLE")
                    $result['Lenght'] = substr($tmp, 3);
                if (substr($tmp, 0, 3) == "ULT")
                    $result['Lyric'] = substr($tmp, 6);
                $tmp = "";
            }
        }
    }
    return $result;
}
4

2 回答 2

0

这是因为您要返回一个数组。如果要打印出数组元素的内容,则必须遍历数组并打印每个元素,而不是返回整个数组。

就像是:

foreach ($results as $key => $value)
    echo $key . " " . $value;
于 2012-10-12T15:59:36.613 回答
0

你可以试试

foreach ( tagReader("4.mp3") as $name => $value ) {
    printf("<p>%s:%s</p>", $name, $value);
}
于 2012-10-12T16:02:02.540 回答