IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    PHP输出json格式歌词

    牧风发表于 2014-01-28 05:08:49
    love 0

    Music页面 加入了歌词同步,来说一下我实现PHP来输出json格式歌词的方法。我之前在网上找过一些方法,但是对于下面的情况就悲剧了,只好写个方法,主要是利用正则表达式。

    歌词地址:http://img.xiami.net/lyric/upload/80/1962480_1353992330.lrc

    1. [00:41.50][01:31.00][02:17.50][02:40.50]Fire fly come back to me
    2. [00:43.50][01:33.50][02:20.50][02:44.00]Make the night as bring as day
    3. [00:47.10][01:36.50][02:23.50][02:47.00]I'll be looking out for you
    4. [00:50.00][01:39.50][02:26.50][02:49.70]Tell me that your lonely too
    5. [00:52.70][01:42.50][02:29.50][02:52.70]Fire fly come lead me on

    PHP部分的代码如下:

    1. function get_lrc($lrc_url){
    2. if( $lrc_url ){
    3. // 远程获取歌词内容
    4. $content = @file_get_contents($lrc_url);
    5. // 按”回车换行“将歌词切割成数组
    6. $array = explode("\n", $content);
    7. $lrc = array();
    8. foreach($array as $val){
    9. // 清除掉”回车不换行“符号
    10. $val = preg_replace('/\r/', '', $val);
    11. // 正则匹配歌词时间
    12. $temp = preg_match_all('/\[\d{2}\:\d{2}\.\d{2}\]/', $val, $matches);
    13. if( !empty($matches[0]) ){
    14. $data_plus = "";
    15. $time_array = array();
    16. // 将可能匹配的多个时间挑选出来,例如:[00:21]、[03:40]
    17. foreach($matches[0] as $V){
    18. $data_plus .= $V;
    19. $V = str_replace("[", "", $V);
    20. $V = str_replace("]", "", $V);
    21. $date_array = explode(":", $V);
    22. // 将例如:00:21、03:40 转换成秒
    23. $time_array[] = intval( $date_array[0]*6000 + $date_array[1]*100 );
    24. }
    25. // 将上面的得到的时间,例如:[00:21][03:40],替换成空,得到歌词
    26. $data_plus = str_replace($data_plus, "", $val);
    27. // 将时间和歌词组合到数组中
    28. foreach($time_array as $V){
    29. $lrc[] = array($V, $data_plus);
    30. }
    31. }
    32. }
    33. // 按时间顺序来排序数组
    34. $lrc = bsort($lrc);
    35. // 输出 json格式
    36. return json_encode($lrc);
    37. }
    38. return false;
    39. }
    40. // 按时间顺序来排序数组
    41. function bsort(array $array){
    42. $count = count($array);
    43. for($i=0; $i<$count; $i++){
    44. for($j=$count-1; $j>$i; $j--){
    45. if($array[$j][0] < $array[$j-1][0]){
    46. $temp = $array[$j];
    47. $array[$j] = $array[$j-1];
    48. $array[$j-1] = $temp;
    49. }
    50. }
    51. }
    52. return $array;
    53. }
    54. echo get_lrc('http://img.xiami.net/lyric/upload/80/1962480_1353992330.lrc');
    55. ?>

    最后预祝大家新年快乐!



沪ICP备19023445号-2号
友情链接