OVH Cloud OVH Cloud

[debutant] Tableaux

9 réponses
Avatar
William
bonsoir
Je voudrais être sur, merci de confirmer.

Je développe déjà mais php est tout neuf pour moi.

lorsque nous créons un array ceci ne peuvent faire l'association qu'entre
deux valeur?

array ('1'=>'un','2'=>'deux')

Si on veut allez plus loin et passer à un tableau multidimensionnel c'est
pareil, on reste bloqué à deux association.

array ('1'=>array('1.1=>'un point un,'1.2'=>'un point deux')) et la suite
logique en passant par les 2 et 2.xx et 3 et 3.xx

Je vous pose la question car voici ce que je voudrais faire.
Pour éviter de refaire tout le temps les mêmes requêtes sur le serveur, je
voudrais stocker le résultat.
Mais certainement comme vous mes tables sont lié par un id et après
certainement plus qu'un élément !!!!!

Comment faire pour tout stocker dans un tableau, car le faire en
multidimensionnel c'est hyper illisible à tout point de vue.

Comment peut on faire, utiliser autre chose que les tableaux?

Cdl
William

--
Vous pouvez me joindre
ou sur Msn
joindreWilliam at hotmail.com en instantanée

9 réponses

Avatar
Olivier Miakinen
bonsoir
Je voudrais être sur, merci de confirmer.


Euh... ta question ne me semble pas claire, mais je vais essayer de deviner.

lorsque nous créons un array ceci ne peuvent faire l'association qu'entre
deux valeur?

array ('1'=>'un','2'=>'deux')


Si je comprends bien la question, la réponse est oui. Dans une case d'un
tableau, tu ne peux mettre qu'un élément.

Je précise quand même que cet élément peut être complexe, par exemple :
array ('1' => array('un','deux','trois'), '2' => array('un','deux'))

Si on veut allez plus loin et passer à un tableau multidimensionnel c'est
pareil, on reste bloqué à deux association.


Oui, mais l'élément d'indice '1' de ton tableau est lui-même un tableau
à plusieurs éléments. N'est-ce pas ce que tu souhaites ?

array ('1'=>array('1.1=>'un point un,'1.2'=>'un point deux')) et la suite
logique en passant par les 2 et 2.xx et 3 et 3.xx


Sais-tu que tu n'es pas obligé d'indicer explicitement chaque élément
d'un tableau ? Est-ce là l'origine de ton problème ?

Je vous pose la question car voici ce que je voudrais faire.


Ah, c'est une bonne idée d'expliciter le besoin avant de chercher la
solution.

Pour éviter de refaire tout le temps les mêmes requêtes sur le serveur, je
voudrais stocker le résultat.


Euh... requêtes ? serveur ? résultat ? Il s'agit de requêtes HTTP vers
un serveur web ? Ton programme PHP, qui tourne probablement sur un
serveur web, fait lui-même des requêtes vers un autre serveur ? Ou bien
tu es en train d'écrire un client web (un navigateur) sous la forme d'un
programme PHP tournant sur la machine de l'utilisateur ?

Mais certainement comme vous mes tables sont lié par un id et après
certainement plus qu'un élément !!!!!


Désolé, j'ai décroché à la phrase précédente, et je ne vois pas comment
y raccrocher des tables. Ni ce qu'est censé être l'id de ces tables.

Comment faire pour tout stocker dans un tableau, car le faire en
multidimensionnel c'est hyper illisible à tout point de vue.


Bon, je repars de zéro, et j'imagine que tu veux stocker les chaînes
"toto", puis "tutu", puis encore "toto", puis "tata" dans un tableau
$zuzu. Il suffit de faire :
$zuzu[] = "toto";
$zuzu[] = "tutu";
$zuzu[] = "toto";
$zuzu[] = "tata";

Avatar
Sebastien
William wrote:


Je vous pose la question car voici ce que je voudrais faire.
Pour éviter de refaire tout le temps les mêmes requêtes sur le serveur, je
voudrais stocker le résultat.
Mais certainement comme vous mes tables sont lié par un id et après
certainement plus qu'un élément !!!!!

Comment faire pour tout stocker dans un tableau, car le faire en
multidimensionnel c'est hyper illisible à tout point de vue.



Tu peux utiliser l'identifiant en clef et placer le tuple directement
dans la tableau :

$tuples = array( ) ;
while ( $tuple = mysql_fetch_object($rs) ) {
$tuples[$tuple->id] = $tuple ;
}

Maintenant tu peux sauvegarder $tuples dans un fichier en le linéarisant
avec serialize( ) (http://www.php.net/serialize)

Ensuite pour accéder au champ "fonction" de l'enregistrement
d'identifiant 123 :

$tuples[123]->fonction

Avatar
DJiK
lorsque nous créons un array ceci ne peuvent faire l'association qu'entre
deux valeur?

array ('1'=>'un','2'=>'deux')



Non, tu peux avoir des tableaux classiques avec des numéro de cases:
tab[0], tab[1]


http://www.php.net/manual/fr/language.types.array.php




Si on veut allez plus loin et passer à un tableau multidimensionnel c'est
pareil, on reste bloqué à deux association.



Là je dois avouer que j'ai jamais fait de tableau multidimensionnel associatif! Ça me parait + simple avec les chiffres, mais pas du tout adapté à ton problème...



Je vous pose la question car voici ce que je voudrais faire.
Pour éviter de refaire tout le temps les mêmes requêtes sur le serveur, je
voudrais stocker le résultat.



Déjà quand tu fais une requête $req = la requête, tu ne fais qu'une requête et après tu as tout le temps pour "fetcher" le résultat de la requête.





Comment faire pour tout stocker dans un tableau



Moi j'utilise toujours le package DB de Pear pour les BDD. Y'a une fonction fetchAssoc qui met tout le résultat de la requête dans un tableau.

Mais je l'utilise que très rarement.



Voilà _ma_ méthode, avec la classe DB:

$req= $db->query("SELECT * FROM table");
while ($tab = $req->fetchRow())
{
...
}


ou alors si je veux qu'un enregistrement:

$tab=$db->getRow("SELECT * FROM table WHERE machin");


--
DJiK

Avatar
Marc
William wrote:



Comment peut on faire, utiliser autre chose que les tableaux?


généralement, avec les requetes SQL, il faut utiliser des tableaux a 2
dimensions.

j'ai pour ma part developpé une classe avec quelques methodes qui me
renvoient au choix :

- un seul element : $db->get_val($sql);
- une liste (un simple tableau) : $db->get_list($sql);
- un enregistrement associatif (un seul) : $db->get_row($sql);
- l'ensemble des enregistrement dans un structure :
$db->get_all($sql);

ca marche comme cela avec les classes Pear::DB

apres il est facile de faire un affichage de table html :

$users = $db->get_all('SELECT * FROM users LIMIT 50');
$user = $db->get_record("SELECT * FROM users WHERE id = $id");

print_r($user);
print_r($users);

affichage qq comme ca :

# user
array(
'nom' => 'Ferry',
'prenom => 'Jules',
'id' => 1
)
# users
array(
0 = array(
'nom' => 'Ferry',
'prenom => 'Jules',
'id' => 1
)
1 = array(
'nom' => 'Reynaud',
'prenom => 'Fernand',
'id' => 2
)
)

$users qui est un tableau d'enregistrement se traite aisément avec une
boucle fpreach.

Avatar
William
Bonjour
Merci pour les réponses
Il est vraiment dommage que le temps de traitement de la modération prenne
autand de temps car cela ne permet pas de réélement suivre les discussion et
nuisnent à ce NG.
Mais bon in fera avec

Cdl
William
Avatar
Lionel
William wrote:
Je vous pose la question car voici ce que je voudrais faire.
Pour éviter de refaire tout le temps les mêmes requêtes sur le
serveur, je voudrais stocker le résultat.


si je comprends bien, tu veux faire un cache.

Mais certainement comme vous mes tables sont lié par un id et après
certainement plus qu'un élément !!!!!


Il te faut faire du mapping objet relationnel si tu veux garder la structure
de ta base, mais en php c'est pas gagné.
Je sais pas s'il existe des librairies stables et bien conçues.

solution 1:
Arrete le php et fais du java.
Utilise Hibernate, ça fait exactement ce que tu veux, et beaucoup plus
encore.

Solution 2:
Tu fais tes requetes avec les bonnes jointures de facon à tout remonter en
une seule fois au lieu de ne remonter que les id, et tu n'as plus de
problème.

Avatar
Olivier Miakinen

Il est vraiment dommage que le temps de traitement de la
modération prenne autand de temps car cela ne permet pas de
réélement suivre les discussion et nuisnent à ce NG.


Je considère ce délai comme le prix de la qualité.
N'oublie pas que les modérateurs sont tous bénévoles.


Oui. Par ailleurs, nous sommes encore au mois d'août. Avec la rentrée,
les modérateurs seront un peu moins en vacances (feignants ! :-)) et les
articles seront approuvés un peu plus vite.

[ copie et suivi vers fr.usenet.divers ]


Avatar
G Roydor
Lionel a écrit:
William wrote:

Je vous pose la question car voici ce que je voudrais faire.
Pour éviter de refaire tout le temps les mêmes requêtes sur le
serveur, je voudrais stocker le résultat.



vous pouvez stocker le résultat en écrivant dans fichier "xxx.js" qui
sera repris dans la page par un script avec src="xxx.js"
mais il faudra avoir une politique de réécriture ou de non-réécriture du
fichier qui soit adaptée à votre pb

GR




si je comprends bien, tu veux faire un cache.


Mais certainement comme vous mes tables sont lié par un id et après
certainement plus qu'un élément !!!!!



Il te faut faire du mapping objet relationnel si tu veux garder la structure
de ta base, mais en php c'est pas gagné.
Je sais pas s'il existe des librairies stables et bien conçues.

solution 1:
Arrete le php et fais du java.
Utilise Hibernate, ça fait exactement ce que tu veux, et beaucoup plus
encore.

Solution 2:
Tu fais tes requetes avec les bonnes jointures de facon à tout remonter en
une seule fois au lieu de ne remonter que les id, et tu n'as plus de
problème.



Avatar
William
Bonjour

"Lionel" a écrit dans le message de
news:41334936$0$17113$


Il te faut faire du mapping objet relationnel si tu veux garder la
structure

de ta base, mais en php c'est pas gagné.
Je sais pas s'il existe des librairies stables et bien conçues.



Je travail sur un CMS (xoops] et cela limite le choix des techniques

solution 1:
Arrete le php et fais du java.


bof

Utilise Hibernate, ça fait exactement ce que tu veux, et beaucoup plus
encore.


Je ne connais pas, je ferais une recherche sur le net pour savoir de quoi on
parle

Solution 2:
Tu fais tes requetes avec les bonnes jointures de facon à tout remonter en
une seule fois au lieu de ne remonter que les id, et tu n'as plus de
problème.


Pour les requêtes qui remontent plus d'un élément et nécessite un
multidimensions, le problème n'est pas le stockage mais la récupération des
données au sein de ce tableau, et je ne vois pas comment faire pour les
traiter avec une fonction :-(

et comme je ne compte pas redevelopper à chaque fois un code d'extraction
adapté au tableau, je crois que je vais abondonnée l'idée sauf si vous avez
des idées de voies à suivre pour "function-ner" le tout.

Cdl
William