如何使用php将mp3、mp4文件名与字符串分开?

如何使用php将mp3、mp4文件名与字符串分开?,php,string,Php,String,大家好,任何人都可以帮助我想从PHP中的内爆数据中分离mp3、mp4 我的数据字符串 $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

大家好,任何人都可以帮助我想从PHP中的内爆数据中分离mp3、mp4

我的数据字符串

$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;

谢谢

假设您的歌曲名称格式正确,这意味着它们被命名为
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);
?>
使用
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);

检查中的结果这听起来像是一个
preg\u match\u all()的作业
regex:

<?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]);
下面是正在运行的代码


以下是关于
preg\u match\u all()
Ok的文档-使用
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,它可以做到这一点。

你应该发布你已经拥有的代码。也许你应该在
内爆
你的数据之前做你想做的事情(检查扩展名,添加到特定数组)来改善你的体验,所以请阅读如何询问,和以及如何创建和
\w+
不支持文件名中所有允许的字符,它在他的示例字符串中是这样做的。当然,如果他有任何其他情况下,它不起作用,这是很容易调整,但所有的例子都匹配。
$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;