php string替换数组并创建新的嵌套数组

时间:2017-08-25 20:45:24

标签: php

我有一个数组,我可以用

打印
print_r($show_arr);

它给了我这个输出(html源代码)

Array
(
    [0] => Marvel's Daredevil.S01E01 - Into the Ring.mp4
    [1] => Marvel's Daredevil.S01E02 - Cut Man.mp4
    [2] => Marvel's Daredevil.S02E05 - Kinbaku.mp4
    [3] => Marvel's Daredevil.S02E06 - Regrets Only.mp4   
)

如何让阵列看起来像这样?

Array
(
      Season[1] => Array
                  (
                     Array(
                          episode =>  "01 - Into the Ring",
                          file =>  "Marvel's Daredevil.S01E01 - Into the Ring.mp4",
                          )
                     Array(
                          episode =>  "02 - Cut Man",
                          file =>  "Marvel's Daredevil.S01E02 - Cut Man.mp4",
                          )
                  )
      Season[2] => Array
                  (
                     Array(
                          episode =>  "05 - Kinbaku",
                          file =>  "Marvel's Daredevil.S02E05 - Kinbaku.mp4",
                          )
                     Array(
                          episode =>  "06 - Regrets Only",
                          file =>  "Marvel's Daredevil.S02E06 - Regrets Only.mp4",
                          )
                  )

1 个答案:

答案 0 :(得分:1)

我很无聊。只需循环数组并使用xintercept()使用匹配的组构建数组:

preg_match()
  • foreach($show_arr as $val) { preg_match('/[^.]+\.S([\d]+)E([0-9]+[^.]+).*/', $val, $m); $result['Season'][(int)$m[1]][(int)$m[2]] = array('episode' => $m[2], 'file' => $m[0]); } 是1个或多个NOT点[^.]+个字符
  • .是一个点\.S([\d]+),然后是.,后跟一个或多个数字(作为第1组捕获)
  • SE([0-9]+[^.]+)后跟一个或多个数字后跟一个或多个NOT点E个字符(捕获为第2组)

此外,这将通过剧集索引子阵列。如果您不想要,请移除.,然后使用[(int)$m[2]]