Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/12/2011, 17h52   #1
Membre du Club
 
Avatar de Paniez
 
Inscription : janvier 2003
Messages : 160
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : janvier 2003
Messages : 160
Points : 54
Points : 54
Par défaut Extraction sous tableau

Bonjour,

Je bute sur une extraction de sous-tableau.
J'ai un tableau avec x sous-tableaux (aussi bien en direct qu'en profondeur, comme une arborescence au final).
Le tableau est de la forme (je vous épargne les paramètres) :

Code :
1
2
3
4
5
$t[0]=array();
$t[0]['id']='macle1';
$t[0]['enfants']=array();
$t[0]['enfants'][0]['id']='macle2';
...
J'ai donc fait une boucle récursive où je cherche à retourner, dans le cas ci-dessus, le sous-tableau associatif ['id']='macle2' :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
  function getSubTab(&$_t,$_champ,$_id,$_tRes=array())
  {
    foreach($_t as $cle => $val)
    {
      if(is_array($val))
	getSubTab($val,$_champ,$_id,$_tRes);
      else
      {
	if(strcmp($cle,$_champ) && strcmp($val,$_id))
	{
	  $_tRes=$_t;
	  break;
	}
      }
    }
    return $_tRes;
  }
A priori, ce code fonctionne (au niveau du break, j'écris dans un fichier et j'ai bien mon tableau), mais lorsque je fais un :
Code :
$t=getSubTab($monTab,'id','macle2');
je n'ai plus rien, ce qui me laisse .

Merci par avance
Paniez est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 20h46   #2
Membre confirmé
 
Homme Clément
Développeur informatique
Inscription : décembre 2006
Messages : 213
Détails du profil
Informations personnelles :
Nom : Homme Clément
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : décembre 2006
Messages : 213
Points : 277
Points : 277
Sympa ce genre de structures de données...
Je vois pas trop comment fonctionne ton code (algorithme).

Mais certains points sont bizarres.
Ton appel récursif pour commencer :
Code :
getSubTab($val,$_champ,$_id,$_tRes);
Ta fonction retourne un tableau (avec le return à la fin), mais on ne récupère pas ce retour dans ton appel récursif. On pourrait croire que ta fonction modifie le dernier paramètre $_tRes, mais en fait non, car celui est passé par copie (faudrait ajouter le '&' devant).

Ensuite les strcmp, pas tout compris : tu fais deux comparaisons en testant la différence, alors qu'on s'attendrait plutôt à ce que tu testes l'égalité, justement pour retrouver le bon chemin dans ton tableau.

Cela dit, tu nous signales que ça marche bien quand même dans un certain cas. Est-ce un coup de chance ou bien n'ai-je rien compris?
Climoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2011, 22h14   #3
Membre du Club
 
Avatar de Paniez
 
Inscription : janvier 2003
Messages : 160
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : janvier 2003
Messages : 160
Points : 54
Points : 54
Re,

Citation:
Envoyé par Climoo Voir le message
Sympa ce genre de structures de données...
J'utilise ce schéma par rapport au stockage qui est fait au format json et une autre partie javascript.

Citation:
Envoyé par Climoo Voir le message
Ton appel récursif pour commencer
L'appel récursif est fait pour l'exploration, mais au final, je ne cherche qu'une seule possibilité, mais c'est un point intéressant que je vais explorer demain.

Citation:
Envoyé par Climoo Voir le message
Ensuite les strcmp, pas tout compris
Il faut vraiment voir comme une exploration de fichiers : chaque profondeur correspond un dossier qui peut contenir un fichier ou, à nouveau, un répertoire. Je cherche donc une corrélation entre une clé et sa valeur (comme un fichier modifié hier, à 14h par exemple).

EDIT:
L'algo fonctionne sur le but, à savoir, trouver la corrélation, mais c'est me retourner le sous-tableau complet qui me pose problème (et je pense que ta remarque intervient).
Paniez est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2011, 08h35   #4
Membre du Club
 
Avatar de Paniez
 
Inscription : janvier 2003
Messages : 160
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : janvier 2003
Messages : 160
Points : 54
Points : 54
Re,

En fait, un "bête" :
Code :
$_tRes=getSubTab($val,$_champ,$_id,$_tRes);
suffit.

Merci
Paniez est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h57.


 
 
 
 
Partenaires

Hébergement Web