Antworten:
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' => 'john@example.com'
),
1 => array(
'name' => 'Jane Doe',
'email' => 'jane@example.com'
),
);
Welches ist gleichbedeutend mit
$array = array();
$array[0] = array();
$array[0]['name'] = 'John Doe';
$array[0]['email'] = 'john@example.com';
$array[1] = array();
$array[1]['name'] = 'Jane Doe';
$array[1]['email'] = 'jane@example.com';
Die folgenden sind äquivalent und führen 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);
Einfach deklarieren? Das musst du nicht. Stellen Sie einfach sicher, dass eine Variable vorhanden ist:
$d = array();
Die Größe von Arrays wird dynamisch geändert, und der Versuch, etwas in ein nicht vorhandenes Element zu schreiben, erstellt es (und erstellt bei Bedarf das gesamte Array).
$d[1][2] = 3;
Dies gilt für eine beliebige Anzahl von Dimensionen ohne vorherige Erklärung.
countdie richtige Dimension verwenden, z. B. es count($d[1])sei denn, ich verstehe Ihren Standpunkt falsch?
Erstens hat PHP keine mehrdimensionalen Arrays, sondern Arrays von Arrays.
Zweitens können Sie eine Funktion schreiben, die dies erledigt:
function declare($m, $n, $value = 0) {
return array_fill(0, $m, array_fill(0, $n, $value));
}
Für eine einfache "Fill as you go" -Lösung:
$foo = array(array());
Dadurch erhalten Sie ein flexibles zweidimensionales Pseudo-Array, das $ foo [ n ] [ n ] mit n <= ∞ enthalten kann (natürlich sind Sie durch die üblichen Einschränkungen der Speichergröße begrenzt, aber ich hoffe, Sie haben die Idee). Dies könnte theoretisch erweitert werden, um so viele Sub-Arrays zu erstellen, wie Sie benötigen.
Soweit mir bekannt ist, gibt es dafür keine eingebaute PHP-Funktion. 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 angegeben ist.
Ich gehe davon aus, dass Sie damit ein leeres, aber initialisiertes Array von Arrays erstellt haben. Zum Beispiel möchten Sie ein Endergebnis wie das folgende eines Arrays von 3 Arrays :
$final_array = array(array(), array(), array());
Dies ist einfach, nur von Hand zu codieren, aber für ein Array beliebiger Größe wie ein Array mit 3 Arrays mit 3 Arrays wird die Initialisierung vor der Verwendung immer komplexer:
$final_array = array(array(array(), array(), array()), array(array(), array(), array()), array(array(), array(), array()));
...etc...
Ich bekomme die Frustration. Es wäre schön, eine einfache Möglichkeit zu haben, ein initialisiertes Array von Arrays mit beliebiger Tiefe zu deklarieren, ohne Fehler zu überprüfen oder auszulösen.
Die Antwort von atli hat mir wirklich geholfen, das zu verstehen. Hier ist ein Beispiel für das Durchlaufen eines zweidimensionalen Arrays. Dieses Beispiel zeigt, wie Sie Werte für bekannte Namen eines Arrays und einen Foreach finden, in dem Sie einfach alle dort gefundenen Felder durchgehen. Ich hoffe es hilft jemandem.
$array = array(
0 => array(
'name' => 'John Doe',
'email' => 'john@example.com'
),
1 => array(
'name' => 'Jane Doe',
'email' => 'jane@example.com'
),
);
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 john@example.com
. field 0 is John Doe
. field 1 is john@example.com
hi element 1
. name is Jane Doe
. email is jane@example.com
. field 0 is Jane Doe
. field 1 is jane@example.com
Und für mich hängt das Argument, ob ein Array spärlich sein soll oder nicht, vom Kontext ab.
Wenn beispielsweise $ a [6] [9] nicht ausgefüllt ist, entspricht dies $ a [6] [9], das beispielsweise mit "" oder 0 gefüllt ist.
$r = array("arr1","arr2");
Um ein einzelnes Array-Element wiederzugeben, sollten Sie Folgendes schreiben:
echo $r[0];
echo $r[1];
Ausgabe wäre: arr1 arr2
Wenn Sie schnell ein mehrdimensionales Array für einen einfachen Wert mit einem Liner erstellen möchten, würde ich empfehlen, diese Array-Bibliothek folgendermaßen zu verwenden:
$array = Arr::setNestedElement([], '1.2.3', 'value');
was produzieren wird
[
1 => [
2 => [
3 => 'value'
]
]
]
Sie können dies versuchen, aber die Werte der zweiten Dimension entsprechen den Indizes:
$array = array_fill_keys(range(0,5), range(0,5));
etwas komplizierter für leeres Array:
$array = array_fill_keys(range(0, 5), array_fill_keys(range(0, 5), null));
Sie müssen ein Array in einem anderen Array deklarieren.
$arr = array(array(content), array(content));
Beispiel:
$arr = array(array(1,2,3), array(4,5,6));
Um das erste Element aus dem Array abzurufen, verwenden Sie Folgendes $arr[0][0]: Dies entspricht dem ersten Element aus dem ersten Array aus dem Array.
$arr[1][0]gibt das erste Element aus dem zweiten Array aus dem Array zurück.