打印输出问题

时间:2012-10-12 15:56:14

标签: php id3

我使用下面的代码打印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) ) 

但我想要像这样的简单输出

  

FileName 4.mp3 Title Bahut Khubsurat Ghazal(mr-Jatt.Com)专辑1Loverz Choice(A Khubsurat Ghazal)(www.mzc.in)作者DJ Badboy(mr-Jatt.Com)Track(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;
}

2 个答案:

答案 0 :(得分:0)

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

类似的东西:

foreach ($results as $key => $value)
    echo $key . " " . $value;

答案 1 :(得分:0)

你可以尝试

foreach ( tagReader("4.mp3") as $name => $value ) {
    printf("<p>%s:%s</p>", $name, $value);
}