数组中的新数组值

时间:2017-10-28 06:41:18

标签: php arrays

我有一个数组

if (_UpdateWScontext.token == string.Empty) return 0;

我将尝试通过seaseons创建新数组,我的代码

Array
    (
        [0] => link/data_1/Serial/Outlander/outlander.s01e01.avi"
        [1] => link/data_1/Serial/Outlander/outlander.s01e02.avi"
...
        [15] => link/data_1/d2/Serial/Outlander/Outlander.s01e16.WEBDLRip.Rus.Eng.DV.AlexFilm.mp4"
        [16] => link/data_1/Serial/Outlander/Outlander.s02e01.WEBDLRip.NewStudio.TV.avi"
        [17] => link/data_1/Serial/Outlander/Outlander.s02e02.WEBDLRip.NewStudio.TV.avi"
        ...
        [28] => link/data_1/Serial/Outlander/Outlander.s02e13.WEBDLRip.NewStudio.TV.avi"
        [29] => link/data_1/Serial/Outlander/S3/Outlander.s03e01.WEBDLRip.NewStudio.TV.avi"
        [30] => link/data_1/Serial/Outlander/S3/Outlander.s03e02.WEBDLRip.NewStudio.TV.avi"
    )

但它返回

$i = 1;
foreach ($array as $items) {
    switch (strpos($items, "s0" . $i)) {
        case true: $seasons[$i][] = $items; break;
        case false: $i++; break;
    }
}

从第2季开始每个赛季跳过1次 - epizode。我怎么解决它?我的错误在哪里?或者如何使用regexp执行此操作?

2 个答案:

答案 0 :(得分:1)

您要么换季或添加一集 - 这就是您要跳过第一集的原因。

您应该更改开关,以便在季节更改后,第一集也会添加到$seasons数组中。

$i = 1;
foreach ($array as $items) {
    switch (strpos($items, "s0" . $i)) {
        case false: $i++; // no-break, execute next case;
        case true: $seasons[$i][] = $items; break;
    }
}

此代码不适用于无序的季节列表,或者如果缺少一个季节。这应该更好:

$seasons = [];
foreach ($array as $item) {
    // Match '.s[0-9]e[0-9].'
    if (preg_match('/\.s(\d+)e\d+\./', $item, $matches)) {
        $seasonN = $matches[1]; // Season number from preg_match
        $seasons[$seasonN][] = $item;
    }
}

答案 1 :(得分:0)

这应该可以解决问题。

$seasons = [];

foreach($array as $seria)
  if(preg_match('/\.s(\d+)/', $seria, $matches)) {
    $seasons[$matches[1]][] = $season;
  }