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]
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' => '[email protected]'
),
1 => array(
'name' => 'Jane Doe',
'email' => '[email protected]'
),
);
Co jest równoważne
$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]';
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);
źródło
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.
źródło
count
odpowiedniego 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)); }
źródło
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.
źródło
Lub w przypadku większych tablic, wszystkie o tej samej wartości:
$m_by_n_array = array_fill(0, $n, array_fill(0, $m, $value);
utworzy tablicę
$m
by$n
ze wszystkim ustawionym na$value
.źródło
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.
źródło
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' => '[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++; } }
Wyjścia:
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]
źródło
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ódło
$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
źródło
I podoba mi się ten sposób:
$cars = array ( array("Volvo",22), array("BMW",15), array("Saab",5), array("Land Rover",17) );
źródło
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' ] ] ]
źródło
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));
źródło
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.źródło