Frage : Verabschiedung von Reihen durch Wert

Ich verstehe, dass PHP gebürtig Variablen durch Wert führt, nicht durch Hinweis (es sei denn Anweisungen, z.B. using den Etzeichenoperator so zu tun verabschiedet werden).

So, wenn ich eine Funktion habe, die eine Reihe zurückbringt, nach sie mehrmals verarbeiten, sind ich verringerte Leistung erhalten (oder gerade using arme Praxis), indem es etwas Ähnliches tut:

function process_list ($list) {
$list = array_slice ($list, $from, $len);
$list = some_sort_function ($list, $sorts);
$list = some_filter_function ($list, $filters);
Rückhol$list;
}

Am I einige vergeudete Duplikate using das oben genannte herstellend?  Ich sollte erwähnen, dass $list nicht gerade eine Reihe ist - diese oben genannte Macht der Beispielfunktion wird verwendet, um einige verschiedene Datensätze zu verarbeiten, konnte die oder konnte alles im Common nicht haben.  Es ist Psuedocode, aber ich denke darstelle die grundlegende Frage besser als die mehr Länge realistisches situation.

TYIA

Antwort : Verabschiedung von Reihen durch Wert

In diesem Fall ist aller, den Sie Einsparung sind, ein Kopienbetrieb der ursprünglichen Reihe.
Die letzten 2 Linien sind, warum das Überschreiten durch Wert normalerweise bevorzugt ist, nachher

$some_dataset = //-grosse schwierige Reihe
$processed = process_list ($some_dataset);

Sie beenden normalerweise oben mit 2 Reihen, $some_dataset und $processed, die unterschiedlich sind.
Wenn process_list eine Reihe durch Hinweis nimmt, dann beenden jene zwei Linien wirklich oben mit $some_dataset und $processed, die 2 COPIES von den selben Reihen sind (nicht Hinweis, kopieren durch Wert).
Reihenanweisungen sind immer Kopie-durchwert, es sei denn u. werden verwendet, um den Hinweis zu kopieren.

array_slice verursacht an sich eine Kopie der Teilmenge.
Die 2 Artfunktionen bringen auch neue Reihen zurück.
Sie sind vermutlich besser gestellt an dem Überschreiten durch Werte gerade festhalten, es sei denn Sie es wirklich verstehen.

FWIW, einen Betrieb der einzelnen Kopie zu speichern, die letzten 2 Linien würde sein

$some_dataset = //-grosse schwierige Reihe
process_list ($some_dataset); // und fahren fort, $some_dataset nach dieser Linie zu verwenden
Weitere Lösungen  
 
programming4us programming4us