PHP 5 для начинающих

Печать

измененное имя) и в реальный массив имен исполнителей (записываются исходные имена). Если имя записано в тестовом массиве, то нет необходимости добавлять его снова.

Теперь следует поместить каждую песню в один массив. Необходимо создать массив, упорядоченный по уникальным именам исполнителей, поэтому есть смысл создать ассоциативный массив, в котором ключами будут имена исполнителей. Так как каждому исполнителю, скорее всего, принадлежит несколько песен, значением каждого элемента массива будет другой одномерный массив, в котором каждый элемент будет представлять одну песню. Поскольку желательно хранить как фактическое название каждой песни, так и имя соответствующего файла, следует представить каждый элемент этого массива тоже в виде массива. Получающаяся в результате структура данных весьма сложна (при желании ее можно просмотреть с помощью функции var_dump() ), но она идеально подходит для создания XML-кода и действительно очень упрощает код сценария radiorequest.php.

Имена всех исполнителей в только что созданном массиве обрабатываются с помощью следующего цикла:

$arTracks = Array();

$arAlreadyAccountedForSongIndices = Array();

for ($i=0; $i<=sizeof($arArtists)-1; $i++) { $strArtistName = $arArtists[$i]; $strTestArtistName = $arTestArtists[$i]; $arTracks[$strArtistName] = Array(); for ($j=0; $j<=sizeof($arMP3Files)-1; $j++) {

if (in_array($j, $arAlreadyAccountedForSongIndices) == false) { $strPath = $arMP3Files[$j]; $intResult = $objMP3ID->read ($strPath);

$strThisArtist = $objMP3ID->getTag ("artists", "Unknown Artist"); $strThisTestArtist = strtoupper(preg_replace("/[^A-Za-z0-9]/", "",

$strThisArtist)); if ($strThisTestArtist == $strTestArtistName) {

array_push($arAlreadyAccountedForSongIndices, $j); $arSongHash["TITLE"] = $objMP3ID->getTag ("name", "Unknown Title"); $strSongFilename = str_replace("$strMyMP3Directory" . "/", "",

$arMP3Files[$j]); $arSongHash["LINK"] = "radiorequest.php?requestfile=" .

urlencode($strSongFilename); array_push($arTracks[$strArtistName], $arSongHash);

};

};

};

};

По сути, в цикле обрабатывается список исполнителей (реальный список, а не тестовый), а в массиве создается ключ на основе имен исполнителей.

Затем для каждого ключа просматривается весь список МРЗ-файлов и проверяется, принадлежит ли каждая композиция данному исполнителю. Имя исполнителя, хранящееся под соответствующим индексом в тестовом массиве, сверяется с именем исполнителя в МРЗ-файле, которое предварительно обрабатывается регулярным выражением. Это, как уже было сказано, позволяет игнорировать различия в количестве пробелов, знаков препинания и регистре символов.

Чтобы определить, какие песни принадлежат тому или иному исполнителю, всю коллекцию приходится просматривать в цикле. Вследствие этого рассматриваемый сценарий может потреблять значительные ресурсы и работать медленно. Поэтому для повышения производительности необходимо связать каждый индекс массива МРЗ-файлов ($arMP3Files) с исполнителем только один раз— композиция, для которой