web-dev-qa-db-fra.com

Comment déclarer un tableau à deux dimensions le plus facilement en PHP?

Comme :

declare int d[0..m, 0..n]
79
Mask

Vous pouvez également créer un tableau associatif ou un tableau semblable à un "tableau de hachage" en spécifiant l'index du tableau.

$array = array(
    0 => array(
        'name' => 'John Doe',
        'email' => '[email protected]'
    ),
    1 => array(
        'name' => 'Jane Doe',
        'email' => '[email protected]'
    ),
);

Qui est équivalent à

$array = array();

$array[0] = array();
$array[0]['name'] = 'John Doe';
$array[0]['email'] = '[email protected]';

$array[1] = array();
$array[1]['name'] = 'Jane Doe';
$array[1]['email'] = '[email protected]';
75
Atli

Les éléments suivants sont équivalents et donnent lieu à un tableau à deux dimensions:

$array = array(
    array(0, 1, 2),
    array(3, 4, 5),
);

ou

$array = array();

$array[] = array(0, 1, 2);
$array[] = array(3, 4, 5);
63
David Snabel-Caunt

Juste déclarer? Tu n'es pas obligé. Assurez-vous simplement que la variable existe:

$d = array();

Les tableaux sont redimensionnés dynamiquement et toute tentative d'écriture sur un élément non-exsistant le crée (et crée un tableau entier si nécessaire)

$d[1][2] = 3;

Ceci est valable pour un nombre quelconque de dimensions sans déclaration préalable.

33
Kornel

Tout d’abord, PHP n’a pas de tableaux multidimensionnels, mais des tableaux de tableaux.

Deuxièmement, vous pouvez écrire une fonction qui le fera:

function declare($m, $n, $value = 0) {
  return array_fill(0, $m, array_fill(0, $n, $value));
}
25
cletus

Pour une solution simple, "remplissez au fur et à mesure":

$foo = array(array());

Cela vous donnera un pseudo tableau flexible à deux dimensions pouvant contenir $ foo [n] [n] où n <= ∞ (bien sûr votre limite par les contraintes habituelles de la taille de la mémoire, mais vous obtenez l'idée j'espère). En théorie, cela pourrait être étendu pour créer autant de sous-réseaux que nécessaire.

11
Kingsolmn

Ou pour les tableaux plus grands, tous avec la même valeur:

$m_by_n_array = array_fill(0, $n, array_fill(0, $m, $value);

créera un tableau $m by $n avec tout réglé sur $value.

8
Amber
$r = array("arr1","arr2");

pour faire écho à un seul élément de tableau, vous devez écrire:

echo $r[0];
echo $r[1];

la sortie serait: arr1 arr2

2
Deshal Kh

Autant que je sache, il n’existe pas de fonction php intégrée pour le faire, vous devez le faire via une boucle ou une méthode personnalisée qui appelle de manière récursive un élément comme array_fill inidcated dans la réponse par @Amber;

Je suppose que vous voulez dire créé un tableau vide mais intialisé de tableaux. Par exemple, vous voulez un résultat final comme ci-dessous d’un tableau de 3 tableaux :

   $final_array = array(array(), array(), array());

C’est simple à manipuler à la main, mais pour un tableau de taille arbitraire, comme un tableau de 3 tableaux de 3 tableaux , l’initialisation avant l’utilisation est complexe:

     $final_array = array(array(array(), array(), array()), array(array(), array(), array()), array(array(), array(), array()));

...etc...

Je reçois la frustration. Il serait bien d’avoir un moyen simple de déclarer un tableau initialisé de tableaux de toute profondeur à utiliser sans vérifier ni jeter d’erreurs.

2
Ray

Et pour moi, l’argument selon lequel un tableau doit être fragmenté ou non dépend du contexte.

Par exemple, si $ a [6] [9] n'est pas renseigné, cela signifie que $ a [6] [9] est rempli avec par exemple "" ou 0.

2
user824232

Si vous voulez créer rapidement un tableau multidimensionnel pour une valeur simple en utilisant un seul liner, je vous recommande d'utiliser cette bibliothèque array pour le faire comme ceci:

$array = Arr::setNestedElement([], '1.2.3', 'value');

qui produira

[
  1 => [
    2 => [
      3 => 'value'
    ]
  ]
]
0
Minwork

la réponse d'Atli m'a vraiment aidé à comprendre cela. Voici un exemple montrant comment parcourir un tableau à deux dimensions. Cet exemple montre comment trouver des valeurs pour les noms connus d'un tableau, ainsi qu'un foreach où il suffit de parcourir tous les champs que vous y trouvez. J'espère que ça aide quelqu'un.

$array = array(
    0 => array(
        'name' => 'John Doe',
        'email' => '[email protected]'
    ),
    1 => array(
        'name' => 'Jane Doe',
        'email' => '[email protected]'
    ),
);

foreach ( $array  as $groupid => $fields) {
    echo "hi element ". $groupid . "\n";
    echo ". name is ". $fields['name'] . "\n";
    echo ". email is ". $fields['email'] . "\n";
    $i = 0;
    foreach ($fields as $field) {
         echo ". field $i is ".$field . "\n";
        $i++;
    }
}

Les sorties:

hi element 0
. name is John Doe
. email is [email protected]
. field 0 is John Doe
. field 1 is [email protected]
hi element 1
. name is Jane Doe
. email is [email protected]
. field 0 is Jane Doe
. field 1 is [email protected]
0
James Burnett

Et j'aime bien cette façon:

$cars = array
  (
  array("Volvo",22),
  array("BMW",15),
  array("Saab",5),
  array("Land Rover",17)
  );
0
Oskar