爆炸的第一个结果

时间:2018-04-06 14:36:22

标签: php

目前我正在开展一个项目,该项目要求我爆炸并替换各种不同序列的第一个结果,其中一个序列是0-9的编号方案,这导致了一些问题。

该项目基本上删除了跟踪列表编号,并用所有各种专辑提交的艺术家名称替换它们。

这是一些例子,以及我已经为我已经解决的两个解决方案做了什么。

01 Song Artist - Song Name
01. Song Artist - Song Name
01. Song Name
01 Song Name

所以上面你看到每个结果都有一点不同,主要是顶部和底部不包含一个句点所以我的方法为第三第四个一个不起作用,这就是那个方法。

if (strpos($middle, '-') !== false) {

    // Middle is being loaded outside of this also, I included it here so you could see what it is.

    $middle = $songname;
    list($before, $after) = explode('.', $middle, 2);
    print $after;

    // This code removes the first . in play, and returns only the "Artist Name - Song Name" portion.

} else {

    // The $title string is the name of the album, not the individual songs.

    $middle = $songname;
    list($before, $after) = explode('.', $middle, 2);
    $exp = explode('–', $title);
    $blimg = $exp[0];
    print $blimg;
    print '-';
    print $after;   

    // This code explodes the first . in an example like "01. Song Name" and returns "Song Name" then we return the first portion of the album title, to collect the artist as well.
}

我可以做些什么来继续这种模式,但对于其他两种标题变体?

2 个答案:

答案 0 :(得分:3)

在我看来,你希望在对它们做任何事情之前标准化字符串,以便更容易检查。

<?php

$possibleFormats = [
    '01 Song Artist - Song Name',
    '01. Song Artist - Song Name',
    '01. Song Name',
    '01 Song Name'
];

$nameArray = [];

foreach ($possibleFormats as $key => $format) {
    // Remove all .
    $format = str_replace(".", "", $format);

    // Remove all numbers
    $format = preg_replace('/[0-9]+/', '', $format);

    // Trim whitespace and update $possibleFormats array
    $possibleFormats[$key] = trim($format);

    // Set the value in the song name array
    $nameArray[] = getSongName($format);
}

function getSongName(string $format) : string
{
    if (strpos($format, '-') !== false) {
        $format = explode('-', $format)[1];
    }

    return $format;
}

print_r($nameArray);

答案 1 :(得分:1)

如上所述使用正则表达式。这里将是一个带有任何字符和空格的数字

([0-9]{2})(.)?(\s)

您匹配2个号码[0-9]{2},后跟任意字符(.)?中的0或1,后跟空格(\s)

然后,我会在-上爆炸,如果您有一两个结果,请执行trim()个,并且您将拥有歌曲名称和艺术家,尊敬。