Arrays - clés => Arbres

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Arrays - clés => Arbres

Re: Arrays - clés => Arbres

par xTG » 05 déc. 2011, 17:47

Hum oui cela conviendrait mieux que mon micmac. =)
Mais même si c'est natif, je doute que ça soit optimal sur des tableaux de plusieurs centaines de valeurs (et que dire de tableaux d'objets ?)...

Re: Arrays - clés => Arbres

par macgawel » 05 déc. 2011, 17:45

Bonjour.

tu as essayé array_values() ?
$tab = Array(
  0 => 1,
  1 => 2,
  2 => 3,
  3 => 4
);
unset($tab[2]);
$regen = array_values($tab);
print_r($regen);

Arrays - clés => Arbres

par xTG » 05 déc. 2011, 15:44

Bonjour à toutes et à tous,

j'ai un problème avec l'utilisation des Arrays, ce qui me pose souci c'est bien évidement le fait que les clés ne sont pas régénérées.
Exemple :
$tab = Array(
  0 => 1,
  1 => 2,
  2 => 3,
  3 => 4
);
unset($tab[2]);
Ceci me donnera l'Array suivant :

Code : Tout sélectionner

Array( 0 => 1, 1 => 2, 3 => 4 )
Et ce trou dans les clés me gêne affreusement...

J'ai des enregistrements qui sont en relations d'une cas à une autre du tableau, c'est en fait l'implémentation d'un Arbre (je suis bien au courant de la class de la STL mais elle ne pourra pas s'étendre pour ce que je veux par la suite - structures d'arbres de Fibonacci, B-Arbre et 2-3-4 par exemple) auquel je pose la contrainte suivante :
Fils Droit = (index * 2) +1
Fils Gauche = (index * 2) + 2
Sauf qu'à chaque fois que je vais supprimer un élément mon calcul sera caduc du fait de la clé manquante. L'ordre dans le tableau restera néanmoins correct (ce qui m'évite un rééquilibrage en plus).
J'ai bien pensé à refaire les clés mais c'est assez lourd comme calcul (même si en terme de code cela tient en deux lignes)...
private function resetKeys(){
	$keys = array_keys(array_fill(0,$this->count(),0));
	$this->values = array_combine($keys, $this->values);
}
J'ai donc cherché tout un tas de solutions pour me dépatouiller avec mes clés.
On peut aussi re-parcourir l'Array à chaque fois en comptant et en associant à chaque noeud une valeur position (donc suppression de valeur = modifier toutes les positions)...
Mais autant dire que ce n'est pas tiptop...

Quelqu'un aurait-il une idée de génie ?