Page 1 sur 1

Besoin d'aide sur les tableaux

Posté : 24 mars 2012, 00:26
par encoreunEncore
Hello,

Je rencontre quelques soucis sur les tableaux en PHP en ce moment, rien de très méchant mais c'est plutôt énervant :

Contexte : Parcourir un tableau (en castant ce dernier)
difficultés rencontrées : Dire à PHP que je veux un tableau et non une string ou autre.

Merci d'avance

Re: Besoin d'aide sur les tableaux

Posté : 24 mars 2012, 09:00
par sirakawa
Question incompréhensible: un exemple précis, soit sous forme de texte, soit sous forme de code, serait le bienvenu.

Re: Besoin d'aide sur les tableaux

Posté : 26 mars 2012, 23:30
par encoreunEncore
Hello !
Bon en plus précis : je veux parser le XML qui suit, je le parse de façon récursive (à chaque noeud rencontré, je créer une instance d’une classe et ajoute à son enfants le nœud suivant, etc).
Quand le nœud a plusieurs enfants, je n’ai aucun soucis :
Data
array
[0]
=>
nom => marley
profession => chanteur reggae
[1}
=>
nom => Lenon
profession => chanteur pop
Mais lorsqu’il n’y en a qu’un seul, l’interprétation de mon tableau PHP est différente :
Data
array
[nom] => marley
[profession] => chanteur reggae
Mon tableau n’est pas pris en tant que tableau à multiples entrées (normale, il n’y en a qu’une seule) mais comment dire à PHP de forcer l’interprétation de mon tableau uni ligne en une combinaison clée (numérique) => valeur (numérique, array, objet,…). J’ai essayé en le castant en array, mais je n’ai pas le résultat voulu, la seule parade trouvée est celle-ci :
if(isset($block['remove']['name'])) {
$block['remove'] = array($block['remove']);
}
foreach($block['remove'] as $name){
$this->addToRemove($name);
}
Donc, si on Remarque un tableau interprétable directement, on le set en array, afin de pouvoir le parcourir via ‘foreach’ mais c’est moche, il y a forcément une autre solution.

J’espère avoir été clair cette fois et merci d’avance !

Re: Besoin d'aide sur les tableaux

Posté : 27 mars 2012, 07:03
par xTG
Et ce tableau il vient d'où ? Car selon ce que tu dis il serait plus intéressant de modifier sa construction pour aboutir au résultat voulu.

Re: Besoin d'aide sur les tableaux

Posté : 27 mars 2012, 07:33
par sirakawa
Et ce tableau il vient d'où ? Car selon ce que tu dis il serait plus intéressant de modifier sa construction pour aboutir au résultat voulu,
car, à vue de nez, le tableau d'origine est plutôt mal construit:
en effet
famille :
'Pere' => 'adam'
fils[0] => "Caïn"
fils[1] => "Abel"
Mere ->ève
devrait donner pour un seul enfant
'Pere' => 'Noël'
fils[0] => "Noëlou"

Re: Besoin d'aide sur les tableaux

Posté : 28 mars 2012, 23:29
par encoreunEncore
Et ce tableau il vient d'où ? Car selon ce que tu dis il serait plus intéressant de modifier sa construction pour aboutir au résultat voulu.
Le tableau est le résultat d'un parsage récursif d'un XML qui renseigne un tableau PHP. Je suis le responsable du xml et du script de parsage mais là n'est pas la question, le tableau obtenu est celui désiré. La seule question réside dans son interprétation : je ne veux pas faire du cas par cas (il a des enfants, je le parse comme ca, il n'en a pas je le parse autrement). J'aimerais qu'il considère le résultat comme un tableau à entrée multiples (clée numérique du tableau->valeur), même si ce dernier ne contient q'un seul enfant (cf exemple ci-dessous).

Data 1
array
[0]
=>
nom => marley
profession => chanteur reggae
[1}
=>
nom => Lenon
profession => chanteur pop
Mais lorsqu’il n’y en a qu’un seul, l’interprétation de mon tableau PHP est différente :
Data 2
array
[nom] => marley
[profession] => chanteur reggae

Je veux que mon Data 2 soit interpreté comme Data 1, à savoir

Data 2
array
[0] // LA EST TOUTE LA DIFFERENCE
[nom] => marley
[profession] => chanteur reggae

Merci d'avance

Re: Besoin d'aide sur les tableaux

Posté : 29 mars 2012, 00:16
par Calimero
J'aimerais qu'il considère le résultat comme un tableau à entrée multiples (clée numérique du tableau->valeur), même si ce dernier ne contient q'un seul enfant (cf exemple ci-dessous).
Bonjour,

Si j'ai bien compris, alors si tu détectes la présence d'une clé 'nom' dans le tableau, cela signifie qu'il n'a qu'une seule entrée (sinon c'est un tableau de tableaux). Si tel est le cas, et si tu veux le faire passer dans le même code que celui qui traite les cas multiples, tu peux l'inclure lui-même dans un nouveau tableau et il passera alors sans problème dans la boucle (mais une seule fois).
$tab=array('nom' => 'Bob', 'profession' => 'chanteur');
if(isset($tab['nom'])){
  $tab=array($tab);
}


foreach($tab as $personne){
  // ....
}

Re: Besoin d'aide sur les tableaux

Posté : 01 avr. 2012, 00:08
par encoreunEncore
ok, autant parler à un sourd...

Re: Besoin d'aide sur les tableaux

Posté : 01 avr. 2012, 00:21
par moogli
Wé, générer un tableau plus utilisable serait effectivement une solution plus simple pour éviter tous ce merdier.
Sinon vérifier que count($tablo) == 2 + vérification de la présence des deux clefs nom / professionn.


@+

Re: Besoin d'aide sur les tableaux

Posté : 01 avr. 2012, 12:24
par sirakawa
ok, autant parler à un sourd...
Ils, moogli en particulier, et tous ceux qui ont tenté de t'aider, ne sont pas sourds le moins du monde, mais plutôt, "loquentes in deserto", soucieux de cohérence, un souci primordial dès qu'on effectue un traitement qui s'apparente à une base de données.
Mon point de vue est que l'aide ne consiste pas à trouver une bidouille résolvant un problème de conception, mais à sugérer une conception mieux adaptée au problème posé.
(À titre personnel, j'avais dans ma paresse conçu une BDD d'apprenants dont un des champs était la liste des groupes auxquels ils appartenaient : "anglais débutant;php renforcé;...". L'exploitation en est possible, mais malcommode, en extrayant pour chacun les éléments de la liste.
En ajoutant une table des formations et une table formations_apprenants (id_apprenant; id_formation),
le problème d'exploitaion devint élémentaire).
Il est bien évident que c'est à la conception du tableau qu'il faut intervenir, ce qui est largement plus simple que, parce qu'on en a bâclé la création, de devoir écrire des traitements différents pour des données analogues.
Entre
Familles[1]['Pere'] = "Adam";
Familles[1]['enfants'][0] = "Caïn";
Familles[1]['enfants'][1] = "Abel";
et
Familles[7392]['Pere'] = "Abraham";
Familles[1]['enfants'][0] = "Isaac";
il n'y a aucune différence, ni au niveau conceptuel, ni au niveau de l'exploitation alors que
Familles[1]['Pere'] = "Adam";
Familles[1]['enfants'][0] = "Caïn";
Familles[1]['enfants'][1] = "Abel";
et
Familles[7392]['Pere'] = "Abraham";
Familles[7392]['enfants'] = "Isaac";
introduit une différence conceptuelle (Abraham ne peut pas avoir un autre enfant) et une différence d'exploitation.