¿Cuál es la forma más sencilla de crear una matriz 2d? Esperaba poder hacer algo similar a esto:
declare int d[0..m, 0..n]
Respuestas:
También puede crear una matriz asociativa, o una matriz como una "tabla hash", especificando el índice de la matriz.
$array = array(
0 => array(
'name' => 'John Doe',
'email' => 'john@example.com'
),
1 => array(
'name' => 'Jane Doe',
'email' => 'jane@example.com'
),
);
Que es 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';
Los siguientes son equivalentes y dan como resultado una matriz bidimensional:
$array = array(
array(0, 1, 2),
array(3, 4, 5),
);
o
$array = array();
$array[] = array(0, 1, 2);
$array[] = array(3, 4, 5);
¿Solo declarar? No tienes que hacerlo. Solo asegúrese de que la variable exista:
$d = array();
Las matrices se redimensionan dinámicamente y el intento de escribir cualquier cosa en un elemento inexistente lo crea (y crea una matriz completa si es necesario)
$d[1][2] = 3;
Esto es válido para cualquier número de dimensiones sin declaraciones previas.
count
en la dimensión correcta, por ejemplo count($d[1])
, a menos que no esté entendiendo tu punto.
En primer lugar, PHP no tiene matrices multidimensionales, tiene matrices de matrices.
En segundo lugar, puede escribir una función que lo haga:
function declare($m, $n, $value = 0) {
return array_fill(0, $m, array_fill(0, $n, $value));
}
Para un tipo de solución simple, "llenar sobre la marcha":
$foo = array(array());
Esto le dará una matriz pseudo bidimensional flexible que puede contener $ foo [ n ] [ n ] donde n <= ∞ (por supuesto, está limitado por las limitaciones habituales del tamaño de la memoria, pero espero que entienda la idea). Esto podría, en teoría, extenderse para crear tantas submatrices como necesite.
Hasta donde yo sé, no hay una función php incorporada para hacer esto, debe hacerlo a través de un bucle o mediante un método personalizado que llame de forma recursiva a algo como array_fill indicado en la respuesta de @Amber;
Supongo que te refieres a crear una matriz de matrices vacía pero inicializada. Por ejemplo, desea un resultado final como el siguiente de una matriz de 3 matrices :
$final_array = array(array(), array(), array());
Esto es simple de codificar a mano, pero para una matriz de tamaño arbitrario como una matriz de 3 matrices de 3 matrices , comienza a ser complejo inicializar antes de usar:
$final_array = array(array(array(), array(), array()), array(array(), array(), array()), array(array(), array(), array()));
... etc ...
Me da frustración. Sería bueno tener una manera fácil de declarar una matriz inicializada de matrices de cualquier profundidad para usar sin verificar ni arrojar errores.
La respuesta de atli realmente me ayudó a entender esto. Aquí hay un ejemplo de cómo iterar a través de una matriz bidimensional. Este ejemplo muestra cómo encontrar valores para nombres conocidos de una matriz y también un foreach donde simplemente pasa por todos los campos que encuentra allí. Espero que esto ayude a alguien.
$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++;
}
}
Salidas:
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
Y para mí, el argumento sobre si una matriz debe ser escasa o no depende del contexto.
Por ejemplo, si $ a [6] [9] no se completa, es equivalente a $ a [6] [9] que se completa, por ejemplo, con "" o 0.
$r = array("arr1","arr2");
para hacer eco de un solo elemento de matriz, debe escribir:
echo $r[0];
echo $r[1];
la salida sería: arr1 arr2
Si desea crear rápidamente una matriz multidimensional para obtener un valor simple usando un trazador de líneas, le recomendaría usar esta biblioteca de matriz para hacerlo así:
$array = Arr::setNestedElement([], '1.2.3', 'value');
que producirá
[
1 => [
2 => [
3 => 'value'
]
]
]
Puede intentar esto, pero los valores de la segunda dimensión serán iguales a los índices:
$array = array_fill_keys(range(0,5), range(0,5));
un poco más complicado para una matriz vacía:
$array = array_fill_keys(range(0, 5), array_fill_keys(range(0, 5), null));
Necesita declarar una matriz en otra matriz.
$arr = array(array(content), array(content));
Ejemplo:
$arr = array(array(1,2,3), array(4,5,6));
Para obtener el primer elemento de la matriz, usará $arr[0][0]
, que es como el primer elemento de la primera matriz de la matriz.
$arr[1][0]
devolverá el primer elemento de la segunda matriz de la matriz.