99 lines
2.6 KiB
PHP
99 lines
2.6 KiB
PHP
|
<?php
|
|||
|
|
|||
|
/*****************************************************************
|
|||
|
Пример использования:
|
|||
|
|
|||
|
$weight_calc = new TrackWeight();
|
|||
|
$weight_calc->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;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|