2017-08-16 1 views
0

J'ai une fonction qui renvoie référence à un tableau (globals sont utilisés pour la simplicité, en fait ces tableaux sont des éléments d'une certaine grande structure arborescente):tableau append PHP référence de tableau

$array1; 
$array2; 

function &foo($arg){ 
    //deduce from $arg reference to which array should be returned 
    if(...) { 
    global $array1; 
    return $array1; 
    } else { 
    global $array2; 
    return $array2; 
    } 
} 

Alors je besoin d'ajouter un autre tableau à celui qui est retourné avec cette fonction (de sorte que tableau initial a été changé):

$arrayToAppend = array('a','b'); 
$arrayToChange = &foo($arg); 
$arrayToChange = array_merge($arrayToChange, $arrayToAppend); 

est-il une syntaxe correcte pour ce que je veux faire? Est-ce que cela change le tableau référencé? Y a-t-il des pièges que je devrais savoir? (pièges sur les trucs de référence, pas sur la fusion de tableaux assosiatifs, etc.)

Répondre

0

Vous mélangez des choses. Vous ne devez utiliser & devant un paramètre de votre fonction (si le paramètre est un type simple, donc pas d'objet) et vous voulez que le contenu de ce paramètre change.

Exemple:

<?php 

$arrayToChange = array('a', 'b'); 
$arrayToAppend = array('c', 'd'); 
mergeArrays($arrayToChange, $arrayToAppend); 

// $arrayToChange will now contain 'a', 'b', 'c', 'd' 

function mergeArrays(& $array, $arrayToAppend) 
{ 
    $array = array_merge($array, $arrayToAppend); 
} 

//Note: This is not the way you should do it. 
//A function best returns a result. 
//This just illustrates how you can change the content of a parameter 
+0

Je ne veux pas changer un paramètre à l'intérieur de la fonction. La fonction n'est responsable que de "choisir" le tableau et de lui renvoyer la référence .. –

+0

Je comprends maintenant ce que vous voulez ... Basé sur une condition que vous voulez la référence (pointeur) retournée par la fonction Je pense que ce que vous faites est correct. gagner beaucoup en retournant simplement la référence.Vous pouvez simplement retourner le tableau ce qui est fait la plupart du temps.Vous vous préoccupez de l'utilisation de la mémoire ou de la vitesse? – RWC

+0

Non, la chose est que je dois changer le tableau qui fait partie du grand arbre La fonction 'foo ($ arg)' est une fonction finder (quel tableau modifier) ​​qui est réutilisée pour de nombreuses opérations de changement possibles. –