Question Comment créer un tableau vide en PHP avec une taille prédéfinie?


Je crée un nouveau tableau dans une boucle for.

for $i < $number_of_items
    $data[$i] = $some_data;

PHP ne cesse de se plaindre du décalage car pour chaque itération, j'ajoute un nouvel index pour le tableau, ce qui est un peu stupide.

Remarque: Décalage non défini: 1 dans include () (ligne 23 de / ... Remarque: Décalage non défini: 1 dans include () (ligne 23 de / .. Remarque: Décalage non défini: 1 dans include () (ligne 23 de / ..

Comment puis-je résoudre ce problème? Y a-t-il un moyen de prédéfinir les éléments de nombre dans le tableau pour que php ne jette pas l'erreur stupide? Comme

$myarray = array($size_of_the_earray);

35
2018-03-22 00:39


origine


Réponses:


Il n'y a pas moyen de le faire.

Pour la postérité

La meilleure façon d’initialiser un tableau comme celui-ci est array_fill. De loin préférable aux différentes solutions en boucle.


53
2018-03-22 00:42



Vous ne pouvez pas prédéfinir une taille de tableau en PHP. Une bonne façon d’atteindre votre objectif est la suivante:

// Create a new array.
$array = array(); 

// Add an item while $i < yourWantedItemQuantity
for ($i = 0; $i < $number_of_items; $i++)
{
    array_push($array, $some_data);
    //or $array[] = $some_data; for single items.
}

Notez qu'il est beaucoup plus rapide d'utiliser array_fill () pour remplir un tableau:

$array = array_fill(0,$number_of_items, $some_data);

Si vous souhaitez vérifier si une valeur a été définie dans un index, vous devez utiliser les éléments suivants: array_key_exists ("key", $ array) ou isset ($ array ["key"])

Voir array_key_exists , isset et array_fill


17
2018-03-22 00:42



Peut-être lié, si vous voulez initialiser et remplir un tableau avec une plage de valeurs, utilisez PHP (attendez-le ...) fonction de gamme:

$a = range(1, 5);  // array(1,2,3,4,5)
$a = range(0, 10, 2); // array(0,2,4,6,8,10)

9
2017-12-04 01:24



Tableaux PHP n'a pas besoin d'être déclaré avec une taille.

Un tableau en PHP est en fait une carte ordonnée

Vous ne devriez pas non plus recevoir d'avertissement / de notification en utilisant un code comme l'exemple que vous avez montré. La remarque commune que les gens obtiennent est "Décalage non défini" lors de la lecture d'un tableau.

Une façon de contrer cela est de vérifier avec isset ou array_key_exists, ou pour utiliser une fonction telle que:

function isset_or($array, $key, $default = NULL) {
    return isset($array[$key]) ? $array[$key] : $default;
}

Pour éviter le code répété.

Remarque: isset renvoie false si l'élément du tableau est NULL, mais a un gain de performances supérieur à array_key_exists.

Si vous souhaitez spécifier un tableau avec une taille pour des raisons de performances, consultez:

SplFixedArray dans la bibliothèque PHP standard.


4
2018-03-22 00:45



Il y a aussi array_pad. Vous pouvez l'utiliser comme ceci:

$data = array_pad($data,$number_of_items,0);

Pour initialiser avec zeros les positions $ number_of_items du tableau $ data.


2
2018-06-23 18:51



PHP fournit deux types de tableaux.

  • tableau normal
  • SplFixedArray

tableau normal: ce tableau est dynamique.

SplFixedArray: il s'agit d'une bibliothèque PHP standard qui permet de créer un tableau de la taille d'un correctif.


-1
2018-01-07 18:56