2017-04-26 6 views
2

Gibt es einen Leistungsunterschied zwischen diesen beiden?Array-Initialisierung Leistungsunterschied

$rules['a']['x'] = 'someValue'; 
$rules['a']['y'] = 'anotherValue'; 

und

$rules['a'] = [ 
    'x' => 'someValue', 
    'y' => 'anotherValue', 
]; 
+1

[1st] (https://3v4l.org/pI9Ap/perf#output) und [2nd] (https://3v4l.org/EjVfZ/perf#output), ich bezweifle, dass es einen großen Unterschied machen wird . – Script47

+3

Sie können selbst testen. Mach etwas wie $ startTime = microtime (true); für ($ i = 0; $ i <100000; $ i ++) {$ Regeln ['a'] ['x'] = 'someValue'; $ rules ['a'] ['y'] = 'andererWert';} echo 'total time ='. microtime (true) - $ startTime; 'und dasselbe für den anderen Fall. Aber ich denke auch, dass es einen großen Unterschied machen wird. –

+0

@Tobias F ja genau ich schlug auch eine –

Antwort

2

Wie sonst von allen erwähnt, würde ein Unterschied vernachlässigbare sein und Sie sollten darüber nicht.

Das besagt aber, die zweite Methode sollte technisch performanter sein, weil (zumindest sieht es so aus) es die ganze Sache in einer einzigen Anweisung macht.

Wenn Sie dies tun:

$rules['a']['x'] = 'someValue'; 
$rules['a']['y'] = 'anotherValue'; 

... die PHP-Engine muss zunächst prüfen, ob $rules vorhanden ist, ob es sich um ein Array ist, ein ArrayAccess Objekt oder nicht (und Fehler in diesem Fall). Danach muss es dasselbe für $rules['a'] tun.
Und es muss zweimal tun, da beide Linien separate Ausdrücke darstellen.

Während auf der anderen Seite:

$rules['a'] = [ 
    'x' => 'someValue', 
    'y' => 'anotherValue', 
]; 

... nur überprüfen, was $rules ist (nicht darum kümmern, ob $rules['a'] vorhanden ist oder welche Art es sich handelt), und es hat nur das einmal zu tun.


Beachten Sie, dass dies eine sehr, sehr vereinfachte Erklärung und es gibt viele andere Faktoren, die ins Spiel kommen, und einen Unterschied machen. Aber das ist der Vorteil einer Hochsprache wie PHP - im Allgemeinen müssen Sie sich nicht darum kümmern oder wissen, wie die Dinge hinter der Szene funktionieren.

Wenn Sie Leistungsoptimierungen vornehmen möchten, ist dies sicherlich die falsche Ansicht. Finden Sie heraus, wo Ihre "Flaschenhälse" sind und arbeiten Sie daran (pro Tipp: 9 von 10, es sind Ihre Datenbankabfragen).

Verwandte Themen