嗨,任何人都可以帮助我将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;
谢谢
答案 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,它可以解决问题。