2010-02-11 4 views
-1

Je construis une petite galerie qui ne contiendra qu'une vingtaine d'images. J'aimerais que ces données soient stockées quelque part (même dans le fichier PHP lui-même) et je cherche donc des moyens de coder les données sous la forme d'un fichier littéral ou d'un fichier de ressources.Quel est le moyen le plus simple de charger un ensemble de données littérales en PHP?

En JavaScript, je voudrais utiliser la notation ressemblant (de mémoire):

var albums = [ 
    { name='Album 1', photos=['photo1.jpg', 'photo2.jpg'] }, 
    { name='Album 2', photos=['photo3.jpg', 'photo4.jpg'] } 
] 

Ceci est JSON, en substance.

Je suppose que JavaScript est plus dynamique que PHP et donc ce n'est pas possible. Existe-t-il une alternative simple, utilisant peut-être le langage XML et se liant à certaines classes?

Je suis un novice en PHP complet, donc n'assumez aucune connaissance dans votre réponse.

Répondre

1

Si vous avez juste quelques données constantes que vous voulez stocker dans un fichier PHP, vous pouvez utiliser la même chose que vous avez fait en Javascript: déclarez simplement un tableau PHP.


Quelque chose comme ça devrait faire l'affaire:

$albums = array(
    array(
     'name' => "Album 1", 
     'photos' => array('photo1.jpg', 'photo2.jpg'), 
    ), 
    array(
     'name' => "Album 2", 
     'photos' => array('photo3.jpg', 'photo4.jpg'), 
    ), 
); 

Et puis, vous pouvez simplement travailler avec le tableau $albums.


Bien sûr, ce n'est pas facile de mettre à jour, vous devez écrire un code PHP valide - mais si vous avez seulement quelques images, comme vous l'avez dit, il ne devrait pas être si difficile à gérer.


Une autre solution serait de stocker les données dans un fichier externe (en XML ou JSON, par exemple) et utiliser quelque chose comme simplexml_load_file ou json_decode pour le lire.

Mais cela signifie un peu plus de travail - alors peut-être pas si nécessaire dans votre cas?

+0

Merci Pascal. J'ai trouvé cette page http://www.herongyang.com/PHP/Data-Type-Data-Literal-Supported-in-PHP.html qui a déclaré 'Il n'y a pas de littéraux de données pour le type de données de tableau' et donc je n'ai pas regarde plus loin! Cette approche est un peu plus verbeuse que l'équivalent JSON, mais seulement légèrement et cela pourrait bien fonctionner. Idéalement, je voudrais me lier à mes propres types, mais je ne trouve pas de fonctions de désérialisation qui se lient aux types connus. –

+0

@Skilldrick: '[1, 2, 3]' n'est pas du code PHP valide, ni en initalisation, ni ailleurs. – soulmerge

1

Enregistrez les données dans un fichier json distinct et utilisez la fonction json_decode() de PHP pour les analyser en objets PHP. En utilisant cette approche, vous avez également un accès facile aux données en JavaScript via AJAX, si jamais vous décidez de vous déplacer dans cette direction.

De cette façon, il est plus facile de travailler avec que de stocker des données dans votre fichier PHP, et cela signifie également que vous pouvez mettre à jour les données de manière triviale si le besoin s'en fait sentir.

+0

Merci pour la réponse. Il semble que cette approche produirait un tableau associatif. Existe-t-il un moyen de lier mes propres types? –

+0

Vous pouvez facilement écrire une méthode pour vos propres types qui prendrait un tableau et mettrait à jour l'objet avec ces valeurs ... – Skilldrick

0

var_export et json_encode sont des possibilités.

file_put_contents($path_to_file, json_encode($albums)); 
+0

Une fois codée, la galerie sera statique, je ne m'intéresse qu'à la désérialisation d'un fichier ou d'une section de code , pas de sérialisation. Encore, bon à savoir. –

1

En PHP, vous définissez probablement cela comme un tableau, c'est à dire.

$albums = array(
    0 => array('name' => 'Album 1', 'photos' => array('photo1.jpg', 'photo2.jpg')), 
    1 => array('name' => 'Album 2', 'photos' => array('photo3.jpg', 'photo4.jpg')) 
); 
1

Vous pouvez faire la même chose exacte en PHP:

$albums = array(
    array(
     'name' => 'Album 1', 
     'photos' => array(
      'photo1.jpg', 
      'photo2.jpg', 
     ) 
    ), 
    array(
     'name' => 'Album 2', 
     'photos' => array(
      'photo3.jpg', 
      'photo4.jpg', 
     ) 
    ) 
); 

Mais cela est mauvais style.Vous pouvez créer une classe:

class Album { 

    protected $name; 

    protected $files; 

    public function __construct($name) { 
     $this->name = $name; 
    } 

    public function addFile($file) { 
     $this->files[] = $file; 
    } 

    public function getFiles() { 
     return $this->files; 
    } 

} 

$album1 = new Album('Album1'); 
$album1->addFile('photo1.jpg'); 
$album1->addFile('photo2.jpg'); 

$album2 = new Album('Album2'); 
$album2->addFile('photo3.jpg'); 
$album2->addFile('photo4.jpg'); 

$albums = array($album1, $album2); 
+0

J'ai vu un fichier de configuration (du projet Gallery) qui utilisait cette dernière approche pour définir les clés de configuration. J'espérais avoir quelque chose d'un peu plus concis que ça (et fortement typé aussi si possible). Existe-t-il un équivalent des expressions d'initialisation d'objet de C# en PHP? –

+0

@Drew: Vous pouvez assigner des valeurs de base (int, string, float, bool, array) aux membres (comme ceci: 'protected $ files = array()'), mais c'est tout. Vous aurez donc besoin d'un constructeur si vous voulez assigner des objets à vos membres. – soulmerge

+0

merci pour la clarification. –

0

ne pas oublier serialize

serialize - Génère une représentation stockable d'une valeur

serialize travaille sur des objets PHP trop qui JSON et XML ne le font pas

Questions connexes