我一直盯着谷歌,堆栈和其他网站4天试图了解这一点,所以我感谢您提供的任何帮助...我是一个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>";
}
然后我会有一个循环,可以为每首歌重复播放器。
帮助?
答案 0 :(得分:4)
您可以通过多种方式存储此信息。第一个是muli维数组,每首歌可以在一个数组中有一个元素,然后包含一个带有歌曲数据的子数组。
<?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>";
}
?>
答案 1 :(得分:2)
数组的关联数组将完成这项工作。
类似的东西:
$songs = array(
'crashing' => array('Title' => "Crashing",
'Path' => "crashingSong.php",
'Artwork' => "crashingArt.php"
), //<repeat for more songs>
);
然后你可以遍历$songs
。您可以访问$songs['crashing']['Title']
等标题。
然而,这是利用面向对象编程的最佳时机。您可以拥有一个包含标题,路径等属性的歌曲类以及一个名为renderPlayer()
的方法。在SE答案中处理这个问题有点小,但是你可以通过Google获取有关OOP PHP的大量信息。
实际上,Joe的答案是歌曲课程定义的一个很好的开始。
答案 2 :(得分:0)
您可能最好定义一个类来保存您的信息。请参阅:http://php.net/manual/en/language.oop5.php
你可以将它存储在数组中,并且只需将索引0作为歌曲标题等等。
您还可以将其存储在关联数组中,其中索引是字符串而不是整数。那么可能是$song['songTitle']
乐队的集合可以以相同的方式存储,jus嵌套。
答案 3 :(得分:0)
如果用例与描述的一样简单,您可以使用数组:
$songInfo = array(
'Crashing' => array('Title' => 'Crashing', 'Path' => "crashingSong.php", 'Artwork' => 'crashingArt.php')
);
然后您可以通过例如:
访问这些字段$songInfo['Crashing']['Path']
如果你打算做更复杂的事情,你应该创建一个类。
答案 4 :(得分:0)
您可以将所有信息存储在所谓的类中。
<?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
}
?>
课程是“可重复使用的”。
这是一个内置了一些函数的示例类,因此您可以看到它们如何被利用。
答案 5 :(得分:0)
您可以使用数组来保存数据(或文件.xml,.json)。 对于互动,您可以尝试(简单示例,抱歉):
$music = array(
'songTitle' => "Crashing",
'songPath' => "crashingSong.php",
'songArtwork' => "crashingArt.php"
);
foreach( $music as $key => $value ){
echo $key . $value;
}
答案 6 :(得分:0)
首先,您只需要一个关联数组:一个变量,将一些数据组合在一起,易于记忆/读取/理解名称:
$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
类,它们又包含一系列歌曲和一系列专辑。这样,您的对象就可以轻松组合在一起。
一旦你完成了这一点,将这些Model类与关系数据库模式(其中Album记录引用艺术家记录(外键))的简单问题相关联,并且每首歌曲引用一张专辑,所以所有数据都很好地链接在一起。
答案 7 :(得分:0)
我在大约10分钟内做到了,所以它不完全确定,但我希望你知道阅读UML(我显然没有用纯UML制作它,但它是一个起始基础):)
PS:$ _DMB是一个变量,您必须存储数据库管理器(pdo或包装器)