Я 4 дня смотрю на Google, Stack и другие сайты, пытаясь разобраться в этом, поэтому я ценю любую помощь, которую вы можете предложить … Я n00b, так что извините, если я неправильно использую какие-либо условия.
Что я пытаюсь сделать:
Я пытаюсь создать сайт группы просто для практики. Я хочу создать блок кода, который хранит несколько фрагментов информации о песне, а затем использовать эти данные в музыкальном проигрывателе. Каждая песня будет иметь свой собственный проигрыватель, который покажет название песни, произведение искусства для песни и позволит вам воспроизвести саму песню.
Чтобы сократить время загрузки сайта и избежать повторяющегося кода, я хотел бы использовать цикл, чтобы сделать так, чтобы у меня был один кусок кода для плеера (ов), а затем создать отдельную итерацию плеера для каждой песни. ,
Я думаю, что могу справиться с аспектом цикла, но я не могу понять, какой тип данных использовать для хранения нескольких фрагментов информации о песне. Будет ли это массив, функция, что-то еще?
Я не ищу кого-то, кто мог бы написать это для меня, я просто хочу знать, в каком направлении идти.
Вот примерный набросок того, что я имею в виду, без правильного синтаксиса:
$song(crashing) {
$songTitle = "Crashing";
$songPath = "crashingSong.php";
$songArtwork = "crashingArt.php";
}
$song(Juliana) {
$songTitle = "Juliana";
$songPath = "julianaSong.php";
$songArtwork = "julianaArtwork.php";
}
$player {
echo "<div class=\"titleHead\">" . $songTitle . "</div>";
echo "<div class=\"link\">" . $songPath . "</div>";
echo "<div class=\"artwork\">" . $songArtwork . "</div>";
}
Тогда у меня будет цикл, который будет повторять проигрыватель для каждой песни.
Помогите?
Вы можете хранить эту информацию несколькими способами. Во-первых, будучи многомерным массивом, каждая песня может иметь элемент в массиве, а затем содержать подмассив с данными песни.
<?php
//Store songs as multidemensional array
$songs = array(
'crashing' => array(
'songTitle' => 'Crashing',
'songPath' => 'crashingSong.php',
'songArtwork' => "crashingArt.php"),
'Juliana' => array(
'songTitle' => 'Juliana',
'songPath' => 'julianaSong.php',
'songArtwork' => "julianaArtwork.php")
);
//Now iterate through each song
foreach($songs as $title => $data) {
echo "<div class=\"titleHead\">" . $data['songTitle'] . "</div>";
echo "<div class=\"link\">" . $data['songPath'] . "</div>";
echo "<div class=\"artwork\">" . $data['songArtwork'] . "</div>";
}
?>
Второй способ — создать класс с песнями и добавить несколько методов, которые помогут сохранять и извлекать эти песни.
<?php
class Songs {
private $songs = array();
// method declaration
public function addSong($songTitle, $songPath, $songArtwork) {
$this->songs[] = array(
'songTitle' => $songTitle,
'songPath' => $songPath,
'songArtwork' => $songArtwork
);
}
public function getSongs() {
return $this->songs;
}
}//Initilaize songs class
$songRef = new Songs();
//Add SOngs
$songRef->addSong('Crashing', 'crashingSong.php', 'crashingArt.php');
$songRef->addSong('Juliana', 'julianaSong.php', 'julianaArtwork.php');
$songs = $songRef->getSongs();
//Now iterate through each song
foreach($songs as $key => $data) {
echo "<div class=\"titleHead\">" . $data['songTitle'] . "</div>";
echo "<div class=\"link\">" . $data['songPath'] . "</div>";
echo "<div class=\"artwork\">" . $data['songArtwork'] . "</div>";
}
?>
Ассоциативный массив массивов сделает работу.
Что-то вроде:
$songs = array(
'crashing' => array('Title' => "Crashing",
'Path' => "crashingSong.php",
'Artwork' => "crashingArt.php"), //<repeat for more songs>
);
Тогда вы можете перебрать $songs
, И вы получите доступ к названию, как $songs['crashing']['Title']
,
Однако это идеальное время для использования объектно-ориентированного программирования. У вас может быть класс песни с такими атрибутами, как title, path и т. Д., И метод с именем renderPlayer()
, Это немного связано с обработкой SE-ответа, но вы можете найти в Google тонны информации об OOP PHP.
На самом деле ответ Джо — отличное начало для определения класса песни.
Вы, вероятно, лучше всего определяете класс для хранения вашей информации. Увидеть: http://php.net/manual/en/language.oop5.php
Вы можете сохранить его в массиве и просто всегда иметь индекс 0, который будет названием песни и т. Д.
Вы также можете сохранить его в ассоциативном массиве, где индексы являются строками, а не целыми числами. Тогда это может быть $song['songTitle']
Коллекция полос может храниться таким же образом, как вложено.
Если сценарий использования прост, как описано, вы можете просто использовать массив:
$songInfo = array(
'Crashing' => array('Title' => 'Crashing', 'Path' => "crashingSong.php", 'Artwork' => 'crashingArt.php')
);
И тогда вы можете получить доступ к этим полям, например:
$songInfo['Crashing']['Path']
Если вы собираетесь делать что-то более сложное, вам, вероятно, следует создать класс.
Вы можете использовать массив для сохранения ваших данных (или файл .xml, .json).
Для взаимодействия вы можете попробовать (простой пример, извините):
$music = array(
'songTitle' => "Crashing",
'songPath' => "crashingSong.php",
'songArtwork' => "crashingArt.php");
foreach( $music as $key => $value ){
echo $key . $value;
}
Сначала вам действительно понадобится ассоциативный массив: одна переменная, объединяющая некоторые данные с легко запоминающимися / читаемыми / понимаемыми именами:
$song = array(
'artist' => 'Foo',
'Title' => 'Bar',
'Album' => 'Foobar',
);//and so on
Однако довольно скоро вы обнаружите, что программирование по массиву — не лучший способ создания поддерживаемого кода. Отнюдь не. Так что вы, вероятно, захотите сделать, это создать класс:
class Song
{
protected $artist = null;
protected $title = null;
protected $album = null;
public function setArtist($artist)
{
$this->artist = $artist;
return $this;
}
public function getArtist()
{
return $this->artist;
}
//add getters and setters for other properties here
}
Чтобы избежать необходимости писать:
$song = new Song();
$song->setArtist('foo')
->setTitle('bar');//and so on
все время вы хотите добавить конструктор:
public function __construct(array $data)
{
foreach ($data as $key => $value)
{
$this->{'set'.ucfirst($key)}($value);//<-- of course, check if method exists first
}
}
В качестве добавленных костей вы можете создавать классы, представляющие альбом (содержащий массив песен), или Artist
класс, который в свою очередь содержит массив песен и массив альбомов. Таким образом, ваши объекты могут быть легко сгруппированы.
После того, как вы это сделаете, достаточно просто связать эти классы модели со схемой реляционной базы данных (где запись альбома ссылается на запись исполнителя (внешние ключи)), а каждая песня ссылается на альбом, так что все данные хорошо связаны все вместе.
Я сделал это примерно за 10 минут, так что это не совсем точно, но я надеюсь, что вы знаете, читали UML (я, очевидно, не сделал это на чистом UML, но это отправная точка) 🙂
PS: $ _DMB — это переменная, в которой вы должны хранить свой менеджер баз данных (pdo или оболочку)
Вы можете хранить всю эту информацию в том, что называется классом.
<?php
class Song {
private $Title;
private $path;
private $Artwork;
}
function Display(){
echo "<div class=\"titleHead\">" . $this->DisplayTitle(). "</div>
<div class=\"link\">" . $this->DisplayPath(). "</div>
<div class=\"artwork\">" .$this->DisplayArtWork() . "</div>
";
function DisplayTitle() {
echo $this->Title;
}
function DisplayPath(){
echo $this->Path
}
function DisplayArtWork(){
echo $this->Artwork
}
?>
Класс является «повторно используемым».
Это пример класса с некоторыми встроенными функциями, поэтому вы можете увидеть, как их можно использовать.