setTrackData('Blondie', 'Call Me', 210); $weight_calc->setFiles($files); // Файлы, полученные от парсера $weight_calc->calculateWeight(); $files = $weight_calc->getFiles(); *****************************************************************/ /** * Класс посчета веса файла (коэфициента, определяющего релевантность) * * @package classes * @author chez **/ class TrackWeight { private $_artist; // Имя исполнителя private $_track; // Название трека private $_duration; // Длительность трека в секундах private $_files; // Массив файлов для сравнения /** * Задает параметры оригинального трека * * @param string $artist Имя исполнителя * @param string $track Запрос * @param int $duration Длительность трека в секундах * @return void * @author chez **/ public function setTrackData($artist, $track, $duration) { $this->_artist = $artist; $this->_track = $track; $this->_duration = $duration; } /** * Задает массив файлов для сравнения * * @param array $files Массив файлов для сравнения * @return void * @author chez **/ public function setFiles($files) { $this->_files = $files; } /** * Возвращает файлы с проставленным весом * * @return array $files Массив файлов * @author chez **/ public function getFiles() { return $this->_files; } /** * Рассчитывает вес для каждого файла * * @return void * @author chez **/ public function calculateWeight() { foreach ($this->_files as $i => $file) { $weight = 0; if ($file['artist'] == $this->_artist) { $weight += 10; } elseif (strpos($file['artist'], $this->_artist) !== false) { $weight += 5; } elseif (strpos($file['track'], $this->_artist) !== false) { $weight += 4; } if ($file['track'] == $this->_track) { $weight += 10; } elseif (strpos($file['track'], $this->_track) !== false) { $weight += 5; } if ($file['duration'] == $this->_duration) { $weight += 10; } else { $delta = abs($file['duration'] - $this->_duration); if ($delta < 5) { $weight += (5 - $delta); } } $this->_files[$i]['weight'] = $weight; } } }