2010-08-16 7 views
0

J'envoie une référence d'une variable tableau qui est initialement vide. Dans la fonction appelée, la baie est remplie.php array passe par référence - affectation d'une valeur dupliquée à la clé rejetée

function one() 
{ 
    $ret = array(); 
    two($ret); 

     pri nt_r($ret); 
} 

function two(&$res) 
{ 
    foreach($a as $b) 
    { 
     $id = $b->getid(); 
     $txt = $b->gettxt(); 

     $res[$id] = $txt; 
     } 
} 

Ici, si id $ i est dupliqué supposer que ce soit par défaut écrasé. Si foreach s'exécute 5 fois et trois fois si id = 5 alors le résultat est seulement deux éléments dans le tableau;

Est-ce le comportement par défaut pour ce type d'affectation de tableaux? ou ai-je oublié quelque chose?


Oui, il remplace les doublons par les dernières valeurs. J'ai testé séparément et il s'est avéré être comme supposé. Mais si nous utilisons array_push j'espère qu'il sera dupliqué. Je pensais que l'affectation directe des doublons sera dupliquée au lieu de l'écraser. De toute façon laissez-moi obtenir quelques commentaires des utilisateurs afin que je puisse mettre à jour si je manque quelques informations utiles sur cette duplication et l'écrasement.

+0

Montrez un exemple comment vous utilisez ces fonctions ... – Centurion

+0

Oui, j'ai voté la réponse. Y a-t-il un autre endroit où je n'ai pas fait ça? et pour certaines réponses j'attends un peu plus de 15 jours avant que je clique sur accepter selon la suggestion de stackoverflow. –

+0

Même pour les réponses où vous admettez avoir répondu adéquatement à votre question? http://stackoverflow.com/questions/3403732/codeigniter-get-current-array-position-while-doing-foreach-object-result-arr/3403747#3403747, http://stackoverflow.com/questions/3387019/ javascript-object-oncreate-event-comme-dans-win32-api-programming-is-it-possible/3387045 # 3387045 –

Répondre

2

De l'PHP Manual on Arrays:

Un tableau en PHP est en fait une carte ordonnée. Une map est un type qui associe des valeurs aux clés. Ce type est optimisé pour plusieurs utilisations différentes; il peut être traité comme un tableau, une liste (vecteur), une table de hachage (une implémentation d'une carte), un dictionnaire, une collection, une pile, une file d'attente, et probablement plus. Comme les valeurs de tableau peuvent être d'autres tableaux, les arbres et les tableaux multidimensionnels sont également possibles.

outre

Une clé peut être soit un nombre entier ou une chaîne. Si une clé est la représentation standard d'un entier, il sera interprété en tant que tel (par exemple « 8 » sera interprété comme 8, tandis que « 08 » sera interprété comme « 08 »)

Et le plus important pour votre question

Si une clé n'est pas spécifiée pour une valeur, le maximum des indices entiers est pris et la nouvelle clé sera cette valeur plus 1. Si une clé qui a déjà une valeur assignée est spécifiée, la valeur sera écrasée.

+0

Nice. Merci pour cette information. –

1

Je ne comprends pas pourquoi vous parlez de tableaux par référence, ou ce que $ a est dans votre exemple, mais la réponse simple est oui, ils sont remplacés. Alors $ a [$ b] sera 2, quel que soit $ b et, d'où $ a vient.

+0

Oui, merci.C'est la première fois que j'essaie un tel code alors j'ai pensé à recevoir des commentaires d'experts. Moi aussi, j'ai testé et ça écrase. –

+0

Dois-je me débarrasser de ce message parce que le sujet n'est pas pertinent. Je n'aurais pas dû ajouter le mot "référence" ici. –

Questions connexes