我使用什么类型的PHP数据类型?

时间:2014-12-29 16:37:31

标签: php arrays function variables

我一直盯着谷歌,堆栈和其他网站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>";
}

然后我会有一个循环,可以为每首歌重复播放器。

帮助?

8 个答案:

答案 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制作它,但它是一个起始基础):)

UML for Song and SongManager Classes

PS:$ _DMB是一个变量,您必须存储数据库管理器(pdo或包装器)