创建数组并在重复时合并

Creating arrays and merging if duplicates

我不确定你会怎么称呼这样的任务,但希望标题可以在其中的一部分上!

让我们开始吧..

我有一个包含 .m3us 的文件夹。 m3us 实际上是与音乐相关的流派。所以你会有 00s.m3u、50s.m3u 等。在这些文件中,只有纯 URL,后跟换行符,指向 MP3 的确切路径。这用于搜索机制,但我们现在已经转移到 SQLITE。

m3us内部示例:

http://streamlink.com/rihanna%20-%20work.mp3
http://streamlink.com/taylor%20swift-%20love%20story.mp3

我的目标是遍历每个 m3u(流派),创建一个包含与该轨道相关信息的轨道的数组。所以你会有 artistname, trackname, genre1, genre2, genre3。如果它来自 00 年代流派。它将生成一个包含 genre1-3 的 00 的数组。既然没有其他记录了!但是,如果假设 http://streamlink.com/rihanna%20-%20work.mp3 出现在 00 和 50 年代。然后我希望它按原样制作所有轨道的最终阵列!完全准备好创建我的 sqlite 文件并继续我的业务。回到 00 年代和 50 年代的问题,如果我在多种类型中都有完全相同的蕾哈娜曲目。然后我希望它在最终项目数组中创建一个最终项目,以填充我的类型 1 - 3。所以我会留下:Rihanna,作品,00 年代,50 年代,"genre3 can be blank here or you can fill with 00s or 50s if there is no other genre to fill in"。现在流派不能超过3种!所以如果我们在 00 年代、50 年代、60 年代有蕾哈娜,那就跳舞吧。它只会放入它找到的前 3 个!所以它会留下:蕾哈娜,工作,00 年代,50 年代,60 年代和舞蹈不会去任何地方!所以无论如何,我想要一个最终数组,其中包含我所有的曲目,这些曲目完全标记有类型 1 - 3 的信息,当然填充了它遇到的任何类型。或者只是第一个类型填充到 1 - 3 所以如果它只只在 00 年代找到蕾哈娜一次。然后它应该显示 00s,00s,00s。或者只是 00s,"","" 没关系!

我卡住的部分是,如果蕾哈娜出现在其中,我不确定如何创建可以包含 00s、50s、60s 的最终数组。我目前循环遍历每个文件,创建数据并推送到一个数组。我不确定从那里去哪里!

我的代码:

<?PHP
$Genres = scandir("/var/lib/mpd/playlists");

$testArray = [];

foreach($Genres as $genre)
{
    if($genre !== "." && $genre !== "..")
    {
        $StrippedGenreName = str_replace("Genres - ", "", str_replace(".m3u","",$genre));

        $GenreArray = explode("\n", file_get_contents("/var/lib/mpd/playlists/".$genre));

        foreach($GenreArray as $genredata)
        {
            $TrackPath = $genredata;

            $RawForm = str_replace(".mp3", "", str_replace("%20", " ", str_replace("http://streamlink.com/", "", $genredata)));
            $TrackDecide = explode(" - ", $RawForm);
            $ArtistName = $TrackDecide[0];
            $TrackName = $TrackDecide[1];
            $GenreData = array("",$TrackPath,$ArtistName,$TrackName,"","",$StrippedGenreName,$StrippedGenreName,$StrippedGenreName,"","Audio");
            array_push($testArray, $GenreData);
        }
    }
}
print("<pre>".print_r($testArray,true)."</pre>");

//Code here to do final array task
?>

我的输出:

Array
(
    [0] => Array
        (
            [0] => 
            [1] => http://streamlink.com/2Pac%20Feat.%20Elton%20John%20-%20Ghetto%20Gospel.mp3
            [2] => 2Pac Feat. Elton John
            [3] => Ghetto Gospel
            [4] => 
            [5] => 
            [6] => 00s
            [7] => 00s
            [8] => 00s
            [9] => 
            [10] => Audio
        )

    [1] => Array
        (
            [0] => 
            [1] => http://streamlink.com/Aaliyah%20-%20Try%20Again.mp3
            [2] => Aaliyah
            [3] => Try Again
            [4] => 
            [5] => 
            [6] => 00s
            [7] => 00s
            [8] => 00s
            [9] => 
            [10] => Audio
        )

    [2] => Array
        (
            [0] => 
            [1] => http://streamlink.com/Adele%20-%20Chasing%20Pavements.mp3
            [2] => Adele
            [3] => Chasing Pavements
            [4] => 
            [5] => 
            [6] => 00s
            [7] => 00s
            [8] => 00s
            [9] => 
            [10] => Audio
        )

    [3] => Array
        (
            [0] => 
            [1] => http://streamlink.com/Al%20Hibbler%20-%20Unchained%20Melody.mp3
            [2] => Al Hibbler
            [3] => Unchained Melody
            [4] => 
            [5] => 
            [6] => 50s
            [7] => 50s
            [8] => 50s
            [9] => 
            [10] => Audio
        )

    [4] => Array
        (
            [0] => 
            [1] => http://streamlink.com/Al%20Martino%20-%20Here%20In%20My%20Heart.mp3
            [2] => Al Martino
            [3] => Here In My Heart
            [4] => 
            [5] => 
            [6] => 50s
            [7] => 50s
            [8] => 50s
            [9] => 
            [10] => Audio
        )

    [5] => Array
        (
            [0] => 
            [1] => http://streamlink.com/Alma%20Cogan%20-%20Dreamboat.mp3
            [2] => Alma Cogan
            [3] => Dreamboat
            [4] => 
            [5] => 
            [6] => 50s
            [7] => 50s
            [8] => 50s
            [9] => 
            [10] => Audio
        )

    [6] => Array
        (
            [0] => 
            [1] => http://streamlink.com/2Pac%20Feat.%20Elton%20John%20-%20Ghetto%20Gospel.mp3
            [2] => 2Pac Feat. Elton John
            [3] => Ghetto Gospel
            [4] => 
            [5] => 
            [6] => 50s
            [7] => 50s
            [8] => 50s
            [9] => 
            [10] => Audio
        )

    [7] => Array
        (
            [0] => 
            [1] => http://streamlink.com/Acker%20Bilk%20-%20Stranger%20On%20The%20Shore.mp3
            [2] => Acker Bilk
            [3] => Stranger On The Shore
            [4] => 
            [5] => 
            [6] => 60s
            [7] => 60s
            [8] => 60s
            [9] => 
            [10] => Audio
        )

    [8] => Array
        (
            [0] => 
            [1] => http://streamlink.com/Adam%20Faith%20-%20Poor%20Me.mp3
            [2] => Adam Faith
            [3] => Poor Me
            [4] => 
            [5] => 
            [6] => 60s
            [7] => 60s
            [8] => 60s
            [9] => 
            [10] => Audio
        )

    [9] => Array
        (
            [0] => 
            [1] => http://streamlink.com/Allisons%20-%20Are%20You%20Sure.mp3
            [2] => Allisons
            [3] => Are You Sure
            [4] => 
            [5] => 
            [6] => 60s
            [7] => 60s
            [8] => 60s
            [9] => 
            [10] => Audio
        )

)

所以在这个例子中,我们可以看到 http://streamlink.com/2Pac%20Feat.%20Elton%20John%20-%20Ghetto%20Gospel.mp3 出现在 00s 和 50s 之下。然后它应该能够在其完整信息状态下创建一个包含所有项目的新数组。

所以我应该剩下:

Array
(
    [0] => Array
        (
            [0] => 
            [1] => http://streamlink.com/2Pac%20Feat.%20Elton%20John%20-%20Ghetto%20Gospel.mp3
            [2] => 2Pac Feat. Elton John
            [3] => Ghetto Gospel
            [4] => 
            [5] => 
            [6] => 00s
            [7] => 50s
            [8] => 50s
            [9] => 
            [10] => Audio
        )

    [1] => Array
        (
            [0] => 
            [1] => http://streamlink.com/Aaliyah%20-%20Try%20Again.mp3
            [2] => Aaliyah
            [3] => Try Again
            [4] => 
            [5] => 
            [6] => 00s
            [7] => 00s
            [8] => 00s
            [9] => 
            [10] => Audio
        )

    [2] => Array
        (
            [0] => 
            [1] => http://streamlink.com/Adele%20-%20Chasing%20Pavements.mp3
            [2] => Adele
            [3] => Chasing Pavements
            [4] => 
            [5] => 
            [6] => 00s
            [7] => 00s
            [8] => 00s
            [9] => 
            [10] => Audio
        )

    [3] => Array
        (
            [0] => 
            [1] => http://streamlink.com/Al%20Hibbler%20-%20Unchained%20Melody.mp3
            [2] => Al Hibbler
            [3] => Unchained Melody
            [4] => 
            [5] => 
            [6] => 50s
            [7] => 50s
            [8] => 50s
            [9] => 
            [10] => Audio
        )

    [4] => Array
        (
            [0] => 
            [1] => http://streamlink.com/Al%20Martino%20-%20Here%20In%20My%20Heart.mp3
            [2] => Al Martino
            [3] => Here In My Heart
            [4] => 
            [5] => 
            [6] => 50s
            [7] => 50s
            [8] => 50s
            [9] => 
            [10] => Audio
        )

    [5] => Array
        (
            [0] => 
            [1] => http://streamlink.com/Alma%20Cogan%20-%20Dreamboat.mp3
            [2] => Alma Cogan
            [3] => Dreamboat
            [4] => 
            [5] => 
            [6] => 50s
            [7] => 50s
            [8] => 50s
            [9] => 
            [10] => Audio
        )

    [6] => Array
        (
            [0] => 
            [1] => http://streamlink.com/Acker%20Bilk%20-%20Stranger%20On%20The%20Shore.mp3
            [2] => Acker Bilk
            [3] => Stranger On The Shore
            [4] => 
            [5] => 
            [6] => 60s
            [7] => 60s
            [8] => 60s
            [9] => 
            [10] => Audio
        )

    [7] => Array
        (
            [0] => 
            [1] => http://streamlink.com/Adam%20Faith%20-%20Poor%20Me.mp3
            [2] => Adam Faith
            [3] => Poor Me
            [4] => 
            [5] => 
            [6] => 60s
            [7] => 60s
            [8] => 60s
            [9] => 
            [10] => Audio
        )

    [8] => Array
        (
            [0] => 
            [1] => http://streamlink.com/Allisons%20-%20Are%20You%20Sure.mp3
            [2] => Allisons
            [3] => Are You Sure
            [4] => 
            [5] => 
            [6] => 60s
            [7] => 60s
            [8] => 60s
            [9] => 
            [10] => Audio
        )

)

请注意显示 http://streamlink.com/2Pac%20Feat.%20Elton%20John%20-%20Ghetto%20Gospel.mp3 已合并的数组[0] 现在包含 Genre1:00s、Genre2:50s 和 Genre3 也为 50s 的信息。这就是我希望最终数组包含的方式。

我希望我解释了自己,并且有人可以阐明一些问题或为我指明正确的方向!谢谢!!

在我看来,streamlink 是 m3u 文件中特定曲目的唯一标识符。所以我将我的数组基于它并将它用作结果中的第一级键:

[
    'http://streamlink.com/2Pac%20Feat.%20Elton%20John%20-%20Ghetto%20Gospel.mp3' => [
        [0] => 
        [1] => http://streamlink.com/2Pac%20Feat.%20Elton%20John%20-%20Ghetto%20Gospel.mp3
        [2] => 2Pac Feat. Elton John
        [3] => Ghetto Gospel
        [4] => 
        [5] => 
        [6] => 00s
        [7] => 00s
        [8] => 00s
        [9] => 
        [10] => Audio
]

等这样你就可以很容易地匹配同一个文件并添加标签。如果你需要去掉最后的键来得到一个普通的数组,你可以只用 运行 array_values 就可以了。