我使用什么类型的PHP数据类型? [关闭]

问题描述 投票:3回答:8

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

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

救命?

php arrays function variables
8个回答
4
投票

您可以通过多种方式存储此信息。第一个是多维数组,每个歌曲可以在一个数组中有一个元素,然后包含一个带有歌曲数据的子数组。

<?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>";

}

?>

2
投票

关联的数组数组将完成这项工作。

就像是:

$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的大量信息。

实际上,Joe的答案是歌曲类定义的一个很好的开始。


0
投票

您可能最好定义一个类来保存您的信息。见:http://php.net/manual/en/language.oop5.php

你可以将它存储在一个数组中,只需要将索引0作为歌曲标题等。

您还可以将其存储在关联数组中,其中索引是字符串而不是整数。然后可能是$song['songTitle']

乐队的集合可以以相同的方式存储,jus嵌套。


0
投票

如果用例就像描述的那样简单,你可以使用一个数组:

$songInfo = array( 
      'Crashing' => array('Title' => 'Crashing', 'Path' => "crashingSong.php", 'Artwork' => 'crashingArt.php')  
);

然后您可以通过例如访问这些字段:

$songInfo['Crashing']['Path'] 

如果你打算做更复杂的事情,你应该创建一个类。


0
投票

您可以使用数组来保存数据(或文件.xml,.json)。对于互动你可以尝试(简单的例子,对不起):

$music = array(
    'songTitle'   => "Crashing",   
    'songPath'    => "crashingSong.php", 
    'songArtwork' => "crashingArt.php"
);

foreach( $music as $key => $value ){
    echo $key . $value;
}

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记录引用艺术家记录(外键)),并且每首歌引用一个专辑,所以所有数据都很好地链接,这是一个简单的问题。一起。


0
投票

我在大约10分钟内完成了它,所以它不是很完美,但我希望你知道读取UML(我显然没有用纯UML制作它,但那是一个起始基础):)

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


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
}

?>

一个类是“可重用的”。

这是一个内置了一些函数的示例类,因此您可以看到它们如何被利用。

© www.soinside.com 2019 - 2024. All rights reserved.