Question : Dépassement des rangées par valeur

Je comprends que le PHP passe à la façon des indigènes des variables par valeur, pas par la référence (à moins que des instructions sont passées de faire ainsi, par exemple, using l'opérateur d'esperluète). le

So si j'ai une fonction qui renvoie une rangée après l'avoir traitée plusieurs fois, suis moi obtenant l'exécution réduite (ou juste using la pratique pauvre), en faisant n'importe quoi de pareil : process_list du

function ($list) {
$list = array_slice ($list, $from, $len) ;
$list = some_sort_function ($list, $sorts) ;
$list = some_filter_function ($list, $filters) ;
$list de retour ;

Am I du
} créant plusieurs reproductions gaspillées using ce qui précède ?  Je devrais mentionner que $list n'est pas simplement une rangée - cette force ci-dessus de fonction d'exemple soit employée pour traiter plusieurs différents ensembles de données, cela pourrait ou ne pourrait pas avoir n'importe quoi en commun.  C'est psuedo-code, mais je pense représente la question fondamentale mieux que plus de longueur situation.

TYIA
class= de

Réponse : Dépassement des rangées par valeur

Dans ce cas-ci, tout que vous êtes économie est une opération de copie de la rangée originale.
Les 2 dernières lignes sont pourquoi le dépassement par valeur est normalement preferred, ensuite

grande rangée compliquée de $some_dataset = de //
$processed = process_list ($some_dataset) ;

Vous finissez normalement vers le haut avec 2 rangées, $some_dataset et $processed, qui sont différents.
Si le process_list prend une rangée par la référence, alors ces deux lignes finissent réellement vers le haut avec $some_dataset et $processed étant 2 COPIES de la même chose des rangées (pas la référence, copient par valeur).
Les tâches de rangée sont toujours copie-par-valeur, à moins qu'et sont employées pour copier la référence.

l'array_slice par lui-même crée une copie du sous-ensemble.
Les 2 fonctions de sorte renvoient également de nouvelles rangées.
Vous êtes probablement juste collage plus aisé au dépassement par des valeurs à moins que vous le comprenniez vraiment.

FWIW, pour sauver une opération de copie simple, les 2 dernières lignes serait

grande rangée compliquée de $some_dataset = de //
process_list ($some_dataset) ; // et continuent à employer $some_dataset après cette ligne
Autres solutions  
  •  MS Excel 2007 et pdf - l'exportation vers le pdf prend de longues heures !
  •  Dans le Perl, comment j'ajoute une valeur à la liste, puis le contrôle pour voir si la valeur existent avant d'ajouter une nouvelle valeur
  •  Comment fais j'initialiser de la HP BL460c G6 de san et de la HP XP 240000
  •  Comment fais j'employer une clef de permis de volume sur un ordinateur de HP avec du CD de restauration
  •  Emplacement primaire de deux SCCM dans l'annuaire actif
  •  L'initiateur et la HP D2D de l'iSCSI R2 du serveur 2008 de Windows GERCENT l'issue
  •  Stocker le dossier dans le mysql using connector.net et le champ de goutte
  •  Carte vidéo d'USB - bit 32 sur le matériel travaillant au niveau du bit 64 ?
  •  asp.net que j'essaye de convertir une forme de HTML en forme d'aspx ou ? ce qui jamais. Aide du besoin sur la façon dont à à elle.
  •  Winzip 12 issues de secours du travail ?
  •  
    programming4us programming4us