28 votes

PHP : Tableau auto-référencé

Existe-t-il un moyen de référencer une clé de tableau à partir de l'intérieur du tableau ? Cela peut avoir plus de sens en format de code :

$array=array(
  "Key1"=>array(
    "Value1",
    "Value2"
  ),
  "Key2"=>&$this['Key1']
);

Ce que je veux, c'est que $array['Key2'] pour obtenir le même résultat que $array['Key1'] . I puede ajouter $array['Key2']=&$array['Key1']; après la création du tableau, mais j'aimerais garder tout cela dans un seul bloc de code si possible.

J'ai vérifié les documents sur les références, ainsi que certaines des questions similaires suggérées ici et une recherche de "référence de tableau php".

19voto

DaveRandom Points 45661

La réponse à cette question, comme il s'avère, est Oui. Cependant, la syntaxe n'est pas très claire, car elle utilise une sorte de sous-déclaration et laisse une variable de référence supplémentaire dans la portée actuelle.

Considérons le code suivant :

<?php

  $array = array(

    // Creates Key1 and assigns the value to it
    // A copy of the value is also placed in $ref
    // At this stage, it's not a reference
    "Key1"=>($ref = array(
      "Value1",
      "Value2"
    )),

    // Now Key2 is a reference to $ref, but not to Key1
    "Key2"=>&$ref,

    // Now everything is referenced together
    "Key1"=>&$ref

  );

J'ai été surpris que cela fonctionne sans erreur, mais c'est le cas - voici la preuve . Bien sûr, vous ne serait pas faire ça, mais vous pouvez...

0voto

Anton Points 663

Impossible de le faire en un seul bloc, car vous n'avez pas encore initialisé la variable. Même chose avec les variables de classe. Pour faire une telle chose, vous devrez créer n'importe quelle variable de n'importe quelle façon, et ensuite utiliser ses liens seulement, mais cela utilise de la mémoire, donc encore une fois, la vraie réponse à votre question est - impossible :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X