wake-up-neo.net

Wie deklariere ich ein zweidimensionales Array am einfachsten in PHP?

Mögen :

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

Sie können auch ein assoziatives Array oder ein "hash-table" -ähnliches Array erstellen, indem Sie den Index des Arrays angeben.

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

Welches ist äquivalent zu

$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

Folgendes ist gleichwertig und führt zu einem zweidimensionalen Array:

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

oder

$array = array();

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

Einfach erklären? Du musst nicht. Stellen Sie nur sicher, dass die Variable vorhanden ist:

$d = array();

Arrays werden dynamisch in der Größe geändert, und es wird versucht, etwas in ein nicht vorhandenes Element zu schreiben.

$d[1][2] = 3;

Dies gilt für eine beliebige Anzahl von Dimensionen ohne vorherige Deklaration.

33
Kornel

Erstens hat PHP keine mehrdimensionalen Arrays, sondern Arrays von Arrays.

Zweitens können Sie eine Funktion schreiben, die es tut:

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

Für eine einfache Lösung "Fill as you go":

$foo = array(array());

Dadurch erhalten Sie ein flexibles zweidimensionales Pseudo-Array, das $ foo [n] [n] enthalten kann, wobei n <= ∞ (natürlich) Sie sind begrenzt durch die üblichen Einschränkungen der Speichergröße, aber Sie bekommen die Idee, wie ich hoffe). Theoretisch könnte dies erweitert werden, um so viele Sub-Arrays zu erstellen, wie Sie benötigen.

11
Kingsolmn

Oder für größere Arrays, die alle denselben Wert haben:

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

erstellt ein $m durch $n-Array, wobei alles auf $value eingestellt ist.

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

um ein einzelnes Array-Element zu wiederholen, sollten Sie schreiben:

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

ausgabe wäre: arr1 arr2

2
Deshal Kh

Soweit mir bekannt ist, gibt es keine eingebaute PHP-Funktion, um dies zu tun. Sie müssen dies über eine Schleife oder über eine benutzerdefinierte Methode tun, die rekursiv etwas wie array_fill aufruft, das in der Antwort von @Amber enthalten ist.

Ich nehme an, Sie haben ein leeres, aber initialisiertes Array von Arrays erstellt. Zum Beispiel möchten Sie ein Endergebnis wie das unten eines Arrays von 3 Arrays :

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

Dies ist einfach für Handcode, aber für ein Array mit beliebiger Größe wie ein Array mit 3 Arrays mit 3 Arrays es wird vor der Verwendung komplexer zu initialisieren:

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

...usw...

Ich bekomme den Frust. Es wäre schön, wenn Sie auf einfache Weise ein initialisiertes Array von Arrays mit beliebiger Tiefe deklarieren können, ohne Fehler zu prüfen oder zu werfen.

2
Ray

Und für mich hängt das Argument, ob ein Array spärlich sein sollte oder nicht, vom Kontext ab.

Wenn zum Beispiel $ a [6] [9] nicht gefüllt ist, entspricht dies dem Wert von $ a [6] [9], der beispielsweise mit "" oder 0 gefüllt wird.

2
user824232

Wenn Sie schnell ein mehrdimensionales Array für einfache Werte mit einem Liner erstellen möchten, würde ich empfehlen, diese array library zu verwenden:

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

was produzieren wird

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

die Antwort von atli hat mir wirklich geholfen, das zu verstehen. Hier ist ein Beispiel für die Iteration durch ein zweidimensionales Array. In diesem Beispiel wird gezeigt, wie Sie Werte für bekannte Namen eines Arrays und auch für ein Foreach finden, in dem Sie einfach alle Felder durchsuchen, die Sie dort finden. Ich hoffe es hilft jemandem.

$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++;
    }
}

Ausgänge:

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

Und ich mag diesen Weg:

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