【转载】PHP输出json格式歌词

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

最后预祝大家新年快乐!

6个评论在“【转载】PHP输出json格式歌词

发表评论

电子邮件地址不会被公开。 必填项已用*标注

插入图片 #(滑稽) #(汗) #(冷) #(黑线) #(喷) #(吐舌) #(乖) #(惊讶) #(惊哭) #(疑问) #(阴脸) #(怒) 更多 »