it-swarm.com.de

Beste Möglichkeit, ein (leeres) Array in PHP zu initialisieren

In bestimmten anderen Sprachen (z. B. AS3) wurde festgestellt, dass das Initialisieren eines neuen Arrays aus Gründen der Objekterstellung und -instanziierung schneller geht, wenn dies wie folgt ausgeführt wird: var foo = [] anstelle von var foo = new Array(). Ich frage mich, ob es in PHP Äquivalenzen gibt.

class Foo {
    private $arr = array(); // is there another / better way?
}
274
Tom Auger

In ECMAScript-Implementierungen (z. B. ActionScript oder JavaScript) ist Array() eine Konstruktorfunktion, und [] ist Teil der Array-Literal-Grammatik. Beide werden auf völlig unterschiedliche Art und Weise optimiert und ausgeführt, wobei die wörtliche Grammatik nicht vom Overhead des Aufrufs einer Funktion abhängt.

PHP hingegen hat Sprachkonstrukte, die wie Funktionen aussehen, aber nicht als solche behandelt werden. Selbst mit PHP 5.4, das [] als Alternative unterstützt, gibt es keinen Unterschied im Overhead, da sie für den Compiler/Parser vollständig synonym sind.

// Before 5.4, you could only write
$array = array(
    "foo" => "bar",
    "bar" => "foo",
);

// As of PHP 5.4, the following is synonymous with the above
$array = [
    "foo" => "bar",
    "bar" => "foo",
];

Wenn Sie ältere Versionen von PHP unterstützen müssen, verwenden Sie die frühere Syntax. Es gibt auch ein Argument für die Lesbarkeit, aber als langjähriger JS-Entwickler erscheint mir Letzteres ziemlich natürlich. Eigentlich habe ich den Fehler gemacht, Arrays mit [] zu initialisieren, als ich zum ersten Mal PHP lernte.

Diese Änderung der Sprache wurde ursprünglich vorgeschlagen und abgelehnt, weil die Kernentwickler aus folgendem Grund gegen die Mehrheit gestimmt hatten:

Dieser Patch wird nicht akzeptiert, da die geringe Mehrheit der Kernentwickler dagegen gestimmt hat. Wenn Sie einen Mittelwert zwischen Core-Entwicklern und Userland-Votes bilden, scheint dies das Gegenteil zu bedeuten. Es wäre jedoch unverantwortlich, einen Patch einzureichen, der auf lange Sicht nicht unterstützt oder gewartet wird.

Es scheint jedoch, dass es zu einer Herzensveränderung bis 5.4 gekommen ist, die möglicherweise durch die Implementierung der Unterstützung für beliebte Datenbanken wie MongoDB (die ECMAScript-Syntax verwenden) beeinflusst wurde.

177
Andy E
$myArray = []; 

Erstellt ein leeres Array.

Sie können später Werte auf das Array übertragen, wie folgt:

$myArray[] = "tree";
$myArray[] = "house";
$myArray[] = "dog";

Zu diesem Zeitpunkt enthält $ myArray "tree", "house" und "dog". Jeder der obigen Befehle wird an das Array angehängt, wobei die bereits vorhandenen Elemente beibehalten werden.

Da ich aus anderen Sprachen stammte, kam mir diese Art, ein Array anzuhängen, seltsam vor. Ich hatte erwartet, dass ich so etwas wie $ myArray + = "dog" oder so machen muss ... oder vielleicht eine "add ()" - Methode wie Visual Basic-Sammlungen. Aber diese Direct Append-Syntax ist sicherlich kurz und praktisch.

Sie müssen tatsächlich die Funktion unset () verwenden, um Elemente zu entfernen:

unset($myArray[1]); 

... würde "house" aus dem Array entfernen (Arrays sind nullbasiert).

unset($myArray); 

... würde das gesamte Array zerstören.

Die leere Syntax in eckigen Klammern zum Anhängen an ein Array ist einfach eine Möglichkeit, PHP anzuweisen, die Indizes jedem Wert automatisch zuzuweisen, anstatt SIE die Indizes zuzuweisen. Im Hintergrund macht PHP Folgendes:

$myArray[0] = "tree";
$myArray[1] = "house";
$myArray[2] = "dog";

Sie können Indizes selbst zuweisen, wenn Sie möchten, und Sie können beliebige Zahlen verwenden. Sie können auch einigen Elementen Indexnummern zuweisen, anderen nicht. Wenn Sie dies tun, fügt PHP die fehlenden Indexnummern ein und erhöht sich dabei von der größten zugewiesenen Indexnummer.

Also, wenn Sie dies tun:

$myArray[10] = "tree";
$myArray[20] = "house";
$myArray[] = "dog";

... das Item "dog" wird eine Indexnummer von 21 erhalten. PHP führt keinen intelligenten Mustervergleich für die inkrementelle Indexzuweisung durch, sodass es nicht weiß, dass Sie möglicherweise gewünscht haben, dass es eine zuweist Index von 30 bis "Hund". Sie können andere Funktionen verwenden, um das Inkrementierungsmuster für ein Array anzugeben. Ich werde hier nicht darauf eingehen, aber es steht alles in den PHP Dokumenten.

Prost,

- = Cameron

193
C Landreaux

Vor PHP 5.4:

$myArray = array();

PHP 5.4 und höher

$myArray = [];
53

In PHP ist ein Array ein Array; Es gibt keine primitiven oder objektbezogenen Überlegungen, sodass es keine vergleichbare Optimierung gibt.

26
Adrian

Was Sie tun, ist zu 100% richtig.

In Bezug auf die Nizza-Benennung wird häufig vor private/geschützte Eigenschaften ein Unterstrich gesetzt, um zu verdeutlichen, dass sie nicht öffentlich sind. Z.B. private $_arr = array() oder public $arr = array()

18
James C

Versuche dies:

    $arr = (array) null;
    var_dump($arr);

    // will print
    // array(0) { }
5
Pyetro

Ein einfaches Array initialisieren:

<?php $array1=array(10,20,30,40,50); ?>

Array innerhalb des Arrays initialisieren:

<?php  $array2=array(6,"santosh","rahul",array("x","y","z")); ?>

Quelle: Sorce für den Code

4
improgrammer

Es gibt keinen anderen Weg, das ist also das Beste.

Bearbeiten: Diese Antwort ist nicht gültig seit PHP 5.4 und höher.

4
Matthieu Napoli