Qual è il modo più semplice per creare un array 2d. Speravo di poter fare qualcosa di simile a questo:
declare int d[0..m, 0..n]
Risposte:
È anche possibile creare un array associativo, o un array simile a una "tabella hash", specificando l'indice dell'array.
$array = array(
0 => array(
'name' => 'John Doe',
'email' => 'john@example.com'
),
1 => array(
'name' => 'Jane Doe',
'email' => 'jane@example.com'
),
);
Che è equivalente a
$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';
I seguenti sono equivalenti e danno come risultato un array bidimensionale:
$array = array(
array(0, 1, 2),
array(3, 4, 5),
);
o
$array = array();
$array[] = array(0, 1, 2);
$array[] = array(3, 4, 5);
Dichiarare e basta? Non devi. Assicurati solo che la variabile esista:
$d = array();
Gli array vengono ridimensionati dinamicamente e il tentativo di scrivere qualsiasi cosa su un elemento non esistente lo crea (e crea l'intero array se necessario)
$d[1][2] = 3;
Ciò è valido per qualsiasi numero di dimensioni senza preventiva dichiarazione.
countsulla dimensione giusta, ad esempio count($d[1]), a meno che io non abbia frainteso il tuo punto?
In primo luogo, PHP non ha array multidimensionali, ha array di array.
In secondo luogo, puoi scrivere una funzione che lo farà:
function declare($m, $n, $value = 0) {
return array_fill(0, $m, array_fill(0, $n, $value));
}
Per una soluzione semplice, "riempi man mano":
$foo = array(array());
Questo ti darà un array pseudo bidimensionale flessibile che può contenere $ foo [ n ] [ n ] dove n <= ∞ (ovviamente sei limitato dai soliti vincoli della dimensione della memoria, ma spero che tu abbia l'idea). Questo potrebbe, in teoria, essere esteso per creare tutti i sotto array di cui hai bisogno.
Per quanto ne so non esiste una funzione php incorporata per farlo, è necessario farlo tramite un ciclo o tramite un metodo personalizzato che richiama in modo ricorsivo qualcosa come array_fill indicato nella risposta da @Amber;
Suppongo che tu intenda creare un array di array vuoto ma inizializzato. Ad esempio, vuoi un risultato finale come il seguente di un array di 3 array :
$final_array = array(array(), array(), array());
Si tratta di un semplice codice manuale, ma per un array di dimensioni arbitrarie come un array di 3 array di 3 array , inizia a diventare complesso inizializzare prima dell'uso:
$final_array = array(array(array(), array(), array()), array(array(), array(), array()), array(array(), array(), array()));
...eccetera...
Ottengo la frustrazione. Sarebbe bello avere un modo semplice per dichiarare un array di array inizializzato di qualsiasi profondità da usare senza controllare o generare errori.
La risposta di atli mi ha davvero aiutato a capire questo. Ecco un esempio di come iterare attraverso una matrice bidimensionale. Questo esempio mostra come trovare i valori per i nomi noti di un array e anche un foreach in cui devi semplicemente passare attraverso tutti i campi che trovi lì. Spero che aiuti qualcuno.
$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++;
}
}
Uscite:
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
E per me l'argomento sul fatto che un array debba essere sparso o meno dipende dal contesto.
Ad esempio, se $ a [6] [9] non è popolato equivale a $ a [6] [9] essere popolato ad esempio con "" o 0.
$r = array("arr1","arr2");
per riprodurre un singolo elemento dell'array dovresti scrivere:
echo $r[0];
echo $r[1];
l'output sarebbe: arr1 arr2
Se vuoi creare rapidamente un array multidimensionale per un valore semplice usando un liner, ti consiglio di usare questa libreria di array per farlo in questo modo:
$array = Arr::setNestedElement([], '1.2.3', 'value');
che produrrà
[
1 => [
2 => [
3 => 'value'
]
]
]
Puoi provare questo, ma i valori della seconda dimensione saranno uguali agli indici:
$array = array_fill_keys(range(0,5), range(0,5));
un po 'più complicato per un array vuoto:
$array = array_fill_keys(range(0, 5), array_fill_keys(range(0, 5), null));
È necessario dichiarare un array in un altro array.
$arr = array(array(content), array(content));
Esempio:
$arr = array(array(1,2,3), array(4,5,6));
Per ottenere il primo elemento dall'array, utilizzerai $arr[0][0], che è come il primo elemento dal primo array dell'array.
$arr[1][0]restituirà il primo elemento dal secondo array dall'array.