2011-07-07 22 views
28

Sé que las matrices se crean dinámicamente, y crearlas antes de tiempo no es realmente necesario, pero ¿cómo se puede hacer eso con una matriz 2D? De la misma manera?¿Cómo crear una matriz 2D vacía en PHP?

(for$j) 
{ 
for($i) 
    { 
    $array[j][i] = "data"; 
    } 
} 

Algo así? Obviamente real para bucles, por supuesto.

+3

un vacío 2 matriz bidimensional ... '$ array = array (array());' – JamesHalsall

+0

De esta manera parece correcta, si está seguro de que desea rellenar la matriz con una cadena vacía n * m veces. –

+1

No sé cuál es el trato con los votos a favor. Miré y no pude encontrar la respuesta, entonces lo pregunté. Disculpame por tratar de aprender a usar php. – Joshua

Respuesta

39

En su forma más simple absoluta, una matriz bidimensional 2D se puede crear como:

<?php 
    $emptyArray = array(array()); 
?> 

O a partir de PHP 5.4 también se puede utilizar:

<?php 
    $emptyArray = [[]]; 
?> 
+0

Gracias. Eso es todo lo que necesitaba. – Joshua

+5

@Joshua No hay problema. Creo que la gente rechazó porque no entendieron el razonamiento detrás de la pregunta. No es una buena razón para rechazar votos. Para eso son los comentarios. Sigue haciendo preguntas ... :) –

+8

Los votos atrasados ​​no me impedirán tratar de aprender. – Joshua

2

El PHP documentation es siempre una buena manera de empezar para este tipo de preguntas básicas.

<?php 
$arr = array("somearray" => array(6 => 5, 13 => 9, "a" => 42)); 

echo $arr["somearray"][6]; // 5 
echo $arr["somearray"][13]; // 9 
echo $arr["somearray"]["a"]; // 42 
?> 
+5

Miré la documentación de la matriz multidimensional, no hay ejemplos para crear una vacía. – Joshua

1

Podría especificar lo que están tratando de hacer? Puede recorrer matrices multidimensionales con la función foreach

$ary=array("subarr" => array("foo","bar")); 

foreach($ary as $a){ 
    foreach($a as $ary_sub){ 
    echo $ary_sub; 
    } 
} 

o

foreach($ary["subarr"] as $key=>$subval){ 
echo $subval; 
} 
21

No se crea una matriz 2D en PHP, no en el sentido tradicional.

Las sugerencias anteriores sobre $a = array(array());, de hecho, la simple creación de la siguiente matriz:

$a = array(
    0 => array() 
); 

Por lo tanto, $a[0][0] = 'test'; daría como resultado lo siguiente:

$a = array(
    0 => array(
     0 => 'test' 
    ) 
); 

A primera vista, parece que funciona , pero de hecho, esto todavía no es una matriz 2d. Cuando intenta utilizar la 2da fila (índice 1), en este punto, PHP lanzaría un aviso. Por ejemplo:

$a[1][0] = 'test2'; 

Esto se debe a $a[1] no contiene nada (recordemos que array(array()) simple creación de una matriz en el índice 0?).

Para que funcione, necesita volver a hacer $a[1] = array();, o si desea evitar los índices que puede hacer, $a[] = array();.


Ejemplo

$a = array(); // array of columns 
for($c=0; $c<5; $c++){ 
    $a[$c] = array(); // array of cells for column $c 
    for($r=0; $r<3; $r++){ 
     $a[$c][$r] = rand(); 
    } 
} 

El código anterior crea un 5x3 "matriz 2D" de números aleatorios.

+0

Me preguntaba de dónde provenían mis entradas vacías cuando usaba matrices de 2 dim. Se modificó $ arr [] = array(); en la parte superior de la función a $ arr [$ id] = array(); donde se usa y todo está bien de nuevo – RST

+0

¡Gracias! ¡Respuesta perfecta! – lopata

2

Si quiero crear una matriz vacía para el manejo de líneas de archivos de texto, sólo tiene que utilizar $ array = array();

1
// dynamic 2D array 

$twoD = array(array()); 
$val = 0; 

// fill the array 
for($r = 0; $r < 4; $r++) { 
    for($c = 0; $c < 4; $c++) 
     $twoD[$r][$c] = $val++; 
} 

// print the current value of $val 
echo $val."<br/>------------------<br/>"; 

// print the array 
for($r = 0; $r < 4; $r++) { 
    for($c = 0; $c < 4; $c++) 
     echo $twoD[$r][$c]; 
    echo "<br/>"; 
} 
2

El uso de "array (array())" se creará una matriz 2D con un elemento de "vacío" en la primera posición. Para crear una matriz en 2D verdaderamente vacía, debe eliminarse.

<?php 
    $emptyArray = array(array()); // Creates a 2D array with one empty element in $emptyArray[0] 
    array_pop($emptyArray);  // Pops element[0] off the array 
?> 
+0

Gracias por compartir esto. Pensé que me estaba volviendo loca tratando de descubrir cómo creé un elemento en blanco en [0] – radleybobins