Initial commit
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
<?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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user