Php 字符串到数组(正则表达式、分解或其他)?

Php 字符串到数组(正则表达式、分解或其他)?,php,arrays,regex,string,Php,Arrays,Regex,String,将格式化为“PT2M19S”或“PT19S”(YouTube api视频持续时间)的字符串分开以得到这样一个数组的最简单方法是什么 Array ( [M] => 2 [S] => 19 ) 请改用此regexp: preg_match_all('/(\d+)([MS])/', $string, $matches, PREG_PATTERN_ORDER); 然后使用第二个捕捉组作为关键帧,第一个组作为值来创建关联数组 $result = array_combine(

将格式化为
“PT2M19S”
“PT19S”
(YouTube api视频持续时间)的字符串分开以得到这样一个数组的最简单方法是什么

Array
(
    [M] => 2
    [S] => 19
)

请改用此regexp:

preg_match_all('/(\d+)([MS])/', $string, $matches, PREG_PATTERN_ORDER);
然后使用第二个捕捉组作为关键帧,第一个组作为值来创建关联数组

$result = array_combine($matches[2], $matches[1]);
为什么不呢

$str = 'PT2M19S';
$i = new DateInterval($str);
print_r($i);
可以使用结果对象的“i”和“s”属性

DateInterval Object
(
    [y] => 0
    [m] => 0
    [d] => 0
    [h] => 0
    [i] => 2
    [s] => 19
    [weekday] => 0
    [weekday_behavior] => 0
    [first_last_day_of] => 0
    [invert] => 0
    [days] => 
    [special_type] => 0
    [special_amount] => 0
    [have_weekday_relative] => 0
    [have_special_relative] => 0
)

如果没有看到所说的“非常奇怪的循环”,我们都会同意它看起来“非常尴尬”。你想要:“PT2M19S”或“PT19S”,但实际的字符串是什么?你打算用这些数字做什么?使用这个正则表达式会更好:
(?:([0-9]*)+[M])([0-9]*)[S]
读取捕获组会给你分开的数字。现在轮到循环了,我想你没有choice@Jay布兰查德-问题不在于我已经完成的循环。如果是的话,我会发布它——这是一种更简单、更不复杂的方法,可以将字符串分发到数组中。啊啊啊啊啊啊啊,这就是为什么YouTube api使用这种格式,它使用ISO 8601。我想知道他们是从哪里想出这种格式的+为了回答我的另一个问题:)我知道一定有比我笨拙的解决方案更好的办法。非常感谢!