Jaki jest najłatwiejszy sposób na utworzenie tablicy 2D. Miałem nadzieję, że uda mi się zrobić coś podobnego do tego:
declare int d[0..m, 0..n]
Odpowiedzi:
Możesz także utworzyć tablicę asocjacyjną lub tablicę typu "hash-table", określając indeks tablicy.
$array = array(
0 => array(
'name' => 'John Doe',
'email' => 'john@example.com'
),
1 => array(
'name' => 'Jane Doe',
'email' => 'jane@example.com'
),
);
Co jest równoważne
$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';
Poniższe są równoważne i dają w wyniku dwuwymiarową tablicę:
$array = array(
array(0, 1, 2),
array(3, 4, 5),
);
lub
$array = array();
$array[] = array(0, 1, 2);
$array[] = array(3, 4, 5);
Po prostu zadeklaruj? Nie musisz. Tylko upewnij się, że zmienna istnieje:
$d = array();
Tablice są zmieniane dynamicznie, a próba zapisania czegokolwiek w nieistniejącym elemencie tworzy to (i tworzy całą tablicę w razie potrzeby)
$d[1][2] = 3;
Dotyczy to dowolnej liczby wymiarów bez wcześniejszej deklaracji.
countodpowiedniego wymiaru, np. count($d[1])chyba, że źle rozumiem twój punkt widzenia?
Po pierwsze, PHP nie ma tablic wielowymiarowych, ma tablice tablic.
Po drugie, możesz napisać funkcję, która to zrobi:
function declare($m, $n, $value = 0) {
return array_fill(0, $m, array_fill(0, $n, $value));
}
Aby uzyskać proste rozwiązanie typu „wypełniaj na bieżąco”:
$foo = array(array());
To da ci elastyczną pseudo dwuwymiarową tablicę, która może pomieścić $ foo [ n ] [ n ], gdzie n <= ∞ (oczywiście jesteś ograniczony zwykłymi ograniczeniami rozmiaru pamięci, ale mam nadzieję, że masz pomysł). Teoretycznie można to rozszerzyć, aby utworzyć tyle pod tablic, ile potrzebujesz.
O ile wiem, nie ma wbudowanej funkcji php, aby to zrobić, musisz to zrobić za pomocą pętli lub niestandardowej metody, która rekurencyjnie wywołuje coś takiego jak array_fill inidcated w odpowiedzi przez @Amber;
Zakładam, że masz na myśli stworzenie pustej, ale zintializowanej tablicy tablic. Na przykład chcesz uzyskać końcowe wyniki, takie jak poniżej, dla tablicy 3 tablic :
$final_array = array(array(), array(), array());
Jest to proste do ręcznego wykonania kodu, ale dla tablicy o dowolnym rozmiarze, takiej jak tablica 3 tablic po 3 tablice , inicjalizacja przed użyciem zaczyna być skomplikowana:
$final_array = array(array(array(), array(), array()), array(array(), array(), array()), array(array(), array(), array()));
...itp...
Czuję frustrację. Byłoby miło mieć łatwy sposób na zadeklarowanie zainicjowanej tablicy tablic o dowolnej głębokości bez sprawdzania lub zgłaszania błędów.
Odpowiedź atli naprawdę pomogła mi to zrozumieć. Oto przykład iteracji po dwuwymiarowej tablicy. Ten przykład pokazuje, jak znaleźć wartości dla znanych nazw tablicy, a także foreach, gdzie po prostu przejdziesz przez wszystkie pola, które tam znajdziesz. Mam nadzieję, że to komuś pomoże.
$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++;
}
}
Wyjścia:
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
A dla mnie argument o tym, czy tablica powinna być rzadka, czy nie, zależy od kontekstu.
Na przykład, jeśli $ a [6] [9] nie jest wypełnione, jest odpowiednikiem wypełnienia $ a [6] [9], na przykład przez „” lub 0.
$r = array("arr1","arr2");
aby wyświetlić pojedynczy element tablicy, należy napisać:
echo $r[0];
echo $r[1];
wynik będzie następujący: arr1 arr2
Jeśli chcesz szybko utworzyć wielowymiarową tablicę dla prostej wartości za pomocą jednego linera, polecam skorzystanie z tej biblioteki tablic, aby zrobić to w następujący sposób:
$array = Arr::setNestedElement([], '1.2.3', 'value');
które wyprodukują
[
1 => [
2 => [
3 => 'value'
]
]
]
Możesz spróbować, ale wartości drugiego wymiaru będą równe indeksom:
$array = array_fill_keys(range(0,5), range(0,5));
trochę bardziej skomplikowane dla pustej tablicy:
$array = array_fill_keys(range(0, 5), array_fill_keys(range(0, 5), null));
Musisz zadeklarować tablicę w innej tablicy.
$arr = array(array(content), array(content));
Przykład:
$arr = array(array(1,2,3), array(4,5,6));
Aby uzyskać pierwszy element z tablicy, użyjesz $arr[0][0], to jest jak pierwszy element z pierwszej tablicy z tablicy.
$arr[1][0]zwróci pierwszy element z drugiej tablicy z tablicy.