JeuWeb - Crée ton jeu par navigateur
Manipuler un tableau à partir d'un tableau (titre très approximatif) - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Manipuler un tableau à partir d'un tableau (titre très approximatif) (/showthread.php?tid=4544)



Manipuler un tableau à partir d'un tableau (titre très approximatif) - Ter Rowan - 17-01-2010

Dans une vocation de généricité je cherche à paramétrer une méthode de type factory :

Code PHP :
<?php 
class donneesIssuesDeBdd
{
private
$donnees; //tableau des objets créés à partir d'une lecture d'enregistrement

// $cle est le nom du champ en bdd qui contient .... la cle
function Lecture($cle)
{
//récupèration des données, on boucle sur la lecture de la bdd
//(peu importe comment) $res contient le résultat d'un fetch array
while ($res = $this->EnregistrementSuivant() )
{
// on créer un objet (avec règle de gestion pour savoir quelle classe choisir avec en paramètre les données de la bdd)
$this->donnees[ $res [ $cle] ] = new ObjetQuiVaBien ( $res);
}
}
}
bon cela marche bien avec $cle le nom d'un champ
maintenant, ce que je souhaite, c'est pouvoir structurer $this->donnees par plusieurs champs si besoin
ca donnerait pour deux cles :

Code PHP :
<?php 
$this
->donnees[ $res[$cle1] ][ $res[$cle2] ]=new ObjetQuiVaBien ( $res);

évidemment je ne sais pas combien de champs doivent être utilisés aussi je compte utiliser un foreach sauf que je ne sais pas quoi faire après ...

Code PHP :
<?php 
class donneesIssuesDeBdd
{
private
$donnees; //tableau des objets créés à partir d'une lecture d'enregistrement

// $cle est un tableau de nom des champs en bdd formant la cle
function Lecture($cle)
{
//récupèration des données, on boucle sur la lecture de la bdd
//(peu importe comment) $res contient le résultat d'un fetch array
while ($res = $this->EnregistrementSuivant() )
{
// on créer un objet (avec règle de gestion pour savoir quelle classe choisir avec en paramètre les données de la bdd)

foreach ( $cle as => $c)
{
// quoi mettre à la place ?
//$this->donnees[ $res [ $cle] ] = new ObjetQuiVaBien ( $res);
}
}
}
}


Une idée ?


RE: Manipuler un tableau à partir d'un tableau (titre très approximatif) - Allwise - 18-01-2010

A ta place, je tournerai le problème un peu différemment. Je garderai l'idée de stocker une collection d'objets dans une variable, mais si tu choisis de stocker ces données de différentes façons, tu risques de t'y perdre et de ne plus savoir comment tu stockes / comment accéder à tes données. J'aurais donc enregistré les données toujours de la même façon, typiquement, dans un tableau sans clé. Ou au pire, la clé serait égale à la clé primaire de la table en question. Car si on a la possibilité d'utiliser d'autres champs, on a un risque de "collision" et de perdre des tuples en chemin.
Ensuite, pour la récupération, rien ne t'empêche de faire plusieurs méthodes, genre
getById($id),
getByFields($fields), où $fields pourrait être une chaîne de caractère ou un tableau de champs :
Code PHP :
<?php
getByFields
($fields) {
if (!
is_array($fields))
$fields = array($fields);

$return = array();

foreach (
$this->donnees as $data) {
foreach (
$fields as $f)
{
if (
in_array($f, $data)) {
$return[] = $data;
}
}

return
$return;
}



RE: Manipuler un tableau à partir d'un tableau (titre très approximatif) - Ter Rowan - 18-01-2010

merci de ta première réponse, mais voilà je souhaite bien stocker les données en fonction de la clé primaire,mais celle ci est composée de deux champs (ou un, ou plus, c'est selon)

il n'y a donc bien qu'une façon de les stocker

j'ai bien imaginé de cré une clé primaire artificielle, ça me permettrait certes d'indicer, mais dans ce cas, je perdrais complètement l'information de l'indice


RE: Manipuler un tableau à partir d'un tableau (titre très approximatif) - Crimson - 18-01-2010

Code PHP :
<?php 
class donneesIssuesDeBdd
{
private
$donnees; //tableau des objets créés à partir d'une lecture d'enregistrement

// $cle est un tableau de nom des champs en bdd formant la cle
function Lecture($cle)
{
//récupèration des données, on boucle sur la lecture de la bdd
//(peu importe comment) $res contient le résultat d'un fetch array
while ($res = $this->EnregistrementSuivant() )
{
// on créer un objet (avec règle de gestion pour savoir quelle classe choisir avec en paramètre les données de la bdd)
$identifiant = array();
foreach (
$cle as => $c)
{
//tableau contenant les différentes clés
$identifiant[] = $res [$c];
}
//on rassemble le tableau de clef et l'objet
$record = array('identifiant'=>$identifiant,'record'=>new ObjetQuiVaBien ( $res));
//on rajoute ça aux données
$this->donnees[] = $record;
}
}
}

Cela serait peut être plus simple d'indicer avec une clé primaire artificielle et de rajouter dans l'ObjetQuiVaBien une variable clé qui contient la liste des clé primaires.

Enfin c'est ptet pas ce que tu cherches. ^^


RE: Manipuler un tableau à partir d'un tableau (titre très approximatif) - Anthor - 18-01-2010

Sinon tu fais un hash de tes identifiants. Comme ça tu reste sur un niveau, et les fonctions de bases seront assez rapide pour traiter tes données.
C'est généralement la méthode la plus simple, plutôt que de chercher à impliquer des tableaux imbriqués.


RE: Manipuler un tableau à partir d'un tableau (titre très approximatif) - Allwise - 18-01-2010

Sinon, tu peux aussi utiliser en indice de ton tableau un hash de ta clé primaire, qu'elle soit composée d'un ou plusieurs champs. Par exemple :
Code PHP :
<?php

class donneesIssuesDeBdd
{
private
$donnees; //tableau des objets créés à partir d'une lecture d'enregistrement

function Lecture($cle)
{
if (!
is_array($cle))
$cle = array($cle);

while (
$res = $this->EnregistrementSuivant() )
{
$hash = array();

foreach (
$cle as $c)
{
$hash[] = $res[$c] ;
}

$hash = md5(serialize($hash));
$this->donnees[$hash] = new ObjetQuiVaBien ( $res);
}
}
}

Edit : grillé par Anthor ^^


RE: Manipuler un tableau à partir d'un tableau (titre très approximatif) - Ter Rowan - 18-01-2010

ah merci,les deux cas sont intéressants je vais étudier ça mais ça m'a l'air pas mal du tout Smile