如何使用php从字符串中分离出mp3,mp4文件名?

时间:2018-10-11 08:53:40

标签: php string

嗨,任何人都可以帮助我将mp3,mp4与PHP中的内嵌数据分开

我的数据字符串

$data = "song1.mp3, video1.mp4, song2.mp3"

我想分为两个单独的字符串,一个字符串仅包含mp4分隔的,,另一个包含mp3

我来自数据库的数据:

$data = "song1.mp3, video.mp4, song2.mp3";
$mp4 = video1.mp4,video2.mp4,..etc;
$mp3 = song1.mp3,song2.mp3,..etc;

谢谢

4 个答案:

答案 0 :(得分:0)

假设您的歌曲名称格式正确,这意味着它们的名称为title.suffix

<?php
     $data = "song1.mp3, video.mp4, song2.mp3";
     $mp3 = [];
     $mp4 = [];

     $song_names = explode(',', $data);
     foreach ($song_names as $song_name) {
         $song_name = trim($song_name);
         $parts = explode('.', $song_name);
         if (count($parts) == 2) {
             $suffix = $parts[1];
             if ($suffix == 'mp3') {
                 $mp3[] = $song_name;
             }
             else if ($suffix == 'mp4') {
                 $mp4[] = $song_name;
             }
         }
     }

     //using implode so that we won't have an extra comma hanging in the end
     $mp4 = implode(', ', $mp4);
     $mp3 = implode(', ', $mp3);
?>

答案 1 :(得分:0)

使用explode()通过,分隔符将字符串转换为数组。然后遍历数组项,并使用substr()获取文件名的扩展名并进行检查。

$data = "song1.mp3, video1.mp4, song2.mp3";
$mp4 = $mp3 = "";
foreach (explode(",", $data) as $file){
    $file = trim($file);
    substr($file, -3) == "mp4" ? $mp4.=$file."," : $mp3.=$file.",";  
}
$mp4 = substr($mp4, 0, -1);
$mp3 = substr($mp3, 0, -1);

demo中查看结果

答案 2 :(得分:0)

这听起来像是touch app.exe 正则表达式的工作:

preg_match_all()

哪个给你:

<?php

$string = 'song1.mp3, video.mp4, song2.mp3';

$regex = '#([^,\s]+\.mp3)#';
preg_match_all($regex, $string, $mp3s);

$regex = '#([^,\s]+\.mp4)#';
preg_match_all($regex, $string, $mp4s);

var_dump($mp3s[0]);
var_dump($mp4s[0]);

这是运行中的代码https://3v4l.org/2EmkR

这是array(2) { [0]=> string(9) "song1.mp3" [1]=> string(9) "song2.mp3" } array(1) { [0]=> string(9) "video.mp4" } http://php.net/manual/en/function.preg-match-all.php

的文档

答案 3 :(得分:0)

好-使用pathinfo

的方法稍有不同
$data = 'song1.mp3, video1.mp4, song2.mp3';
$mp3s = [];
$mp4s = [];

foreach (explode(', ', $data) as $file) {
    $type = pathinfo($file)['extension'];
    $type === 'mp3' ? $mp3s[] = $file : $mp4s[] = $file;
}

echo implode(', ', $mp4s) . PHP_EOL;
echo implode(', ', $mp3s) . PHP_EOL;

可以肯定地使用一些验证等等,但是作为MVP,它可以解决问题。