web-dev-qa-db-fra.com

Meilleure façon d'initialiser un tableau (vide) dans PHP

Dans certains autres langages (AS3 par exemple), il a été noté que l'initialisation d'un nouveau tableau est plus rapide si on procède comme ceci var foo = [] plutôt que var foo = new Array() pour des raisons de création d'objet et d'instanciation. Je me demande s'il existe des équivalences en PHP?

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

Dans les implémentations ECMAScript (par exemple, ActionScript ou JavaScript), Array() est une fonction constructeur et [] fait partie de la grammaire littérale du tableau. Les deux sont optimisés et exécutés de manière complètement différente, la grammaire littérale n'étant pas gênée par la surcharge d'appeler une fonction.

En revanche, PHP a des constructions de langage qui peuvent ressembler à des fonctions mais ne sont pas traitées comme telles. Même avec PHP 5.4, qui prend en charge [] comme alternative, il n'y a pas de différence de temps système car, en ce qui concerne le compilateur/analyseur, ils sont également synonymes.

// 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",
];

Si vous devez prendre en charge les anciennes versions de PHP, utilisez l'ancienne syntaxe. Il existe également un argument en faveur de la lisibilité mais, étant un développeur JS de longue date, ce dernier me semble plutôt naturel. En fait, j'ai commis l'erreur d'essayer d'initialiser des tableaux à l'aide de [] lors de mon premier apprentissage de PHP.

Ce changement à la langue a été initialement proposé et rejeté en raison d'un vote majoritaire contre les développeurs principaux pour la raison suivante:

Ce patch ne sera pas accepté car une faible majorité des développeurs principaux ont voté contre. Bien que si vous prenez une moyenne cumulée entre les développeurs principaux et les votes des utilisateurs, cela semble montrer le contraire, il serait irresponsable de soumettre un correctif qui ne soit pas pris en charge ou maintenu à long terme.

Cependant, il semble qu’un changement d’esprit s’est opéré menant à la version 5.4, peut-être influencé par les implémentations de la prise en charge des bases de données populaires telles que MongoDB (qui utilise la syntaxe ECMAScript).

177
Andy E
$myArray = []; 

Crée un tableau vide.

Vous pouvez pousser des valeurs sur le tableau ultérieurement, comme suit:

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

À ce stade, $ myArray contient "arbre", "maison" et "chien". Chacune des commandes ci-dessus est ajoutée au tableau, en préservant les éléments déjà présents.

Venant d’autres langues, cette façon d’ajouter à un tableau m’a semblé étrange. Je m'attendais à devoir faire quelque chose comme $ myArray + = "dog" ou quelque chose comme ça ... ou peut-être une méthode "add ()" comme celle des collections Visual Basic. Mais cette syntaxe directe avec append est certainement courte et pratique.

En réalité, vous devez utiliser la fonction unset () pour supprimer des éléments:

unset($myArray[1]); 

... supprimerait "maison" du tableau (les tableaux sont à base zéro).

unset($myArray); 

... détruirait tout le tableau.

Pour être clair, la syntaxe des crochets vides pour l'ajout à un tableau est simplement un moyen de dire à PHP d'affecter les index à chaque valeur automatiquement, plutôt qu'à YOU d'affecter les index. Sous les couvertures, PHP fait ceci:

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

Vous pouvez affecter vous-même des index et utiliser les nombres de votre choix. Vous pouvez également affecter des numéros d'index à certains éléments et pas à d'autres. Si vous faites cela, PHP remplira les numéros d'index manquants, en incrémentant à partir du plus grand numéro d'index attribué au fur et à mesure.

Donc, si vous faites ceci:

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

... l'item "chien" se verra attribuer un numéro d'index 21. PHP ne fait pas de correspondance de modèle intelligente pour l'affectation incrémentielle d'index. 30 à "chien". Vous pouvez utiliser d'autres fonctions pour spécifier le modèle d'incrément d'un tableau. Je n'entrerai pas dans les détails ici, mais tout se trouve dans la documentation PHP.

À votre santé,

- = Cameron

193
C Landreaux

Avant PHP 5.4:

$myArray = array();

PHP 5.4 et supérieur

$myArray = [];
53

Dans PHP, un tableau est un tableau; il n'y a pas de considération primitive vs objet, il n'y a donc pas d'optimisation comparable à avoir.

26
Adrian

Ce que vous faites est correct à 100%.

Pour ce qui est de nommer Nice, il est souvent fait que les propriétés privées/protégées sont précédées d’un soulignement pour indiquer qu’elles ne sont pas publiques. Par exemple. private $_arr = array() ou public $arr = array()

18
James C

Essaye ça:

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

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

Initialiser un tableau simple:

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

Initialisation d'un tableau dans un tableau:

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

Source: Sorce pour le code

4
improgrammer

Il y a pas d'autre moyen, alors c'est le meilleur.

Edit: Cette réponse n'est pas valide depuis PHP 5.4 et supérieur.

4
Matthieu Napoli