2009-04-21 9 views
0

PHP.Welches ist die richtige Form?

$a['0']=1; 
$a[0]=2; 

Welches ist die richtige Form?

+1

Das nächste Mal versuchen Sie einen besseren Titel zu wählen. Etwas wie: "Welches ist die richtige Syntax für Array-Zuweisung in PHP?" – Hejazzman

+0

Wirklich? Du nickst den Titel ??? wow – KOGI

Antwort

4

Im ersten würden Sie einen Array Artikel haben: Key: 0 Index: 0

Im zweiten Beispiel haben Sie einen Indexsatz nur. Index: 0

$arr = array(); 
$arr['Hello'] = 'World'; 
$arr['YoYo'] = 'Whazzap'; 
$arr[2]  = 'No key'; // Index 2 
+0

In Ihrem Beispiel gibt es keine Indizes 0 und 1, also ist es besser, diese Kommentare zu beseitigen. –

+0

Ich dachte, es wäre automatisch indexiert auf + 1? – sshow

+0

gibt es keine "automatische Indizierung", wenn Sie nicht die $ arr [] = Syntax verwenden. – GoatRider

8

Im ersten Beispiel verwenden Sie einen String-Index des Arrays, die eine Hash-Tabelle „unter der Haube“ sein wird, die langsamer ist. Um auf den Wert zuzugreifen, wird eine "Zahl" aus der Zeichenkette berechnet, um den von Ihnen gespeicherten Wert zu finden. Diese Berechnung braucht Zeit.

Das zweite Beispiel ist ein Array basierend auf Zahlen, die schneller ist. Arrays, die Zahlen verwenden, indexieren das Array entsprechend dieser Nummer. 0 ist Index 0; 1 ist Index 1. Dies ist eine sehr effiziente Möglichkeit, auf ein Array zuzugreifen. Es sind keine komplexen Berechnungen erforderlich. Der Index ist nur ein Offset vom Anfang des Arrays, um auf den Wert zuzugreifen.

Wenn Sie nur Zahlen verwenden, sollten Sie Zahlen und keine Zeichenfolgen verwenden. Es ist keine Frage der Form, es ist eine Frage, wie PHP Ihren Code optimieren wird. Zahlen sind schneller.

jedoch die Geschwindigkeitsunterschiede vernachlässigbar sind, wenn sie mit kleinen Größen zu tun (Arrays speichert weniger als < 10.000 Elemente, Dank Paolo;)

+1

Ich denke du übertreibst hier die Geschwindigkeitsunterschiede. Ja, das erste ist langsamer, aber nicht drastisch oder auf irgendeiner Ebene, die es für eine Anwendung remote relevant macht, es sei denn, Sie machen Hunderttausende von Permutationen. –

0

sind sie beide gut, werden sie beide arbeiten.

Der Unterschied besteht darin, dass Sie beim ersten den Wert 1 auf einen Schlüssel mit dem Namen '0' setzen. Im zweiten Beispiel setzen Sie den Wert 2 auf das erste Element im Array.

sie nicht versehentlich mischen;)

2

Wenn Sie Ihre Schlüssel für die zweite Option verwenden zu erhöhen. Der erste ist ein assoziatives Array, das die Zeichenfolge "0" als Schlüssel enthält.

4

Die "lustige" Sache ist, Sie erhalten genau das gleiche Ergebnis. PHP (aus welchem ​​Grund auch immer) testet, ob eine als Array-Index verwendete Zeichenfolge nur Ziffern enthält. Ist dies der Fall, wird die Zeichenfolge in int oder double konvertiert.

<?php 
$x=array(); $x['0'] = 'foo'; 
var_dump($x); 

$x=array(); $x[0] = 'foo'; 
var_dump($x);

Für beide Arrays erhalten Sie [0] => foo, nicht [ "0"] => foo.

Oder ein weiterer Test:

<?php 
$x = array(); 
$x[0] = 'a'; 
$x['1'] = 'b'; 
$x['01'] = 'c'; 
$x['foo'] = 'd';

foreach($x as $k=>$v) { echo $k, ' ', gettype($k), "\n"; }

0 integer 
1 integer 
01 string 
foo string

Wenn Sie immer noch nicht glauben, es einen Blick auf #define HANDLE_NUMERIC nehmen (Schlüssel, Länge, func) in zend_hash.h und wann und wo sie verwendet wird.

Sie denken, dass das komisch ist? Wählen Sie eine Nummer und gehen Sie in Linie ...

+0

Ja, aber probiere $ x ['0'] = 'foo'; $ x [0] = 'bar'; – GoatRider

+0

Genau mein Punkt. $ x ['0'] = 'foo'; $ x [0] = 'bar'; var_dump ($ x); -> [0] => string (3) "bar" – VolkerK

1

Sie sind beide "richtig", aber haben die verschiedenen Nebenwirkungen, wie von anderen festgestellt.

Eine andere Sache, die ich darauf hinweisen würde, wenn Sie nur Elemente auf ein Array schieben sind, können Sie diese Syntax bevorzugen könnten:

$ a = array(); $ a [] = 1; $ a [] = 2; // jetzt $ a [0] ist 1 und $ a [1] ist 2.

Verwandte Themen