Como declarar uma matriz bidimensional mais facilmente em PHP?

Tipo:

declare int d[0..m, 0..n]
 73
Author: David Snabel-Caunt, 2009-11-28

9 answers

Você também pode criar um array associativo, ou um array tipo" hash-table", especificando o índice do array.

$array = array(
    0 => array(
        'name' => 'John Doe',
        'email' => '[email protected]'
    ),
    1 => array(
        'name' => 'Jane Doe',
        'email' => '[email protected]'
    ),
);

Que é equivalente a

$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]';
 69
Author: Atli, 2009-11-28 00:30:30

Os seguintes elementos são equivalentes e resultam numa matriz bidimensional:

$array = array(
    array(0, 1, 2),
    array(3, 4, 5),
);

Ou

$array = array();

$array[] = array(0, 1, 2);
$array[] = array(3, 4, 5);
 61
Author: David Snabel-Caunt, 2009-11-28 00:23:36
Apenas declarar? Não precisas. Apenas certifique-se de que a variável existe:
$d = array();

As matrizes são dimensionadas dinamicamente, e tentar escrever qualquer coisa para um elemento não-resistente cria-o (e cria uma matriz inteira se necessário)

$d[1][2] = 3;

Isto é válido para qualquer número de dimensões sem declarações prévias.

 29
Author: Kornel, 2009-11-28 00:34:41
Em primeiro lugar, o PHP não tem matrizes multidimensionais, tem matrizes de matrizes.

Em segundo lugar, você pode escrever uma função que irá fazê-lo:

function declare($m, $n, $value = 0) {
  return array_fill(0, $m, array_fill(0, $n, $value));
}
 24
Author: cletus, 2009-11-28 01:24:45

Para uma solução simples:

$foo = array(array());

Isto vai dar-lhe uma matriz pseudo-bidimensional flexível que pode conter $foo [[[[[7]}n][n] where n
 9
Author: Kingsolmn, 2011-11-19 07:07:52

Ou para matrizes maiores, todas com o mesmo valor:

$m_by_n_array = array_fill(0, $n, array_fill(0, $m, $value);

Criará um array $m por $n com tudo definido para $value.

 8
Author: Amber, 2009-11-28 00:26:07

Tanto quanto sei não existe nenhuma função de php incorporada para fazer isto, você precisa fazê-lo através de um loop ou através de um método personalizado que recursivamente chama para algo como array_ fill inidcated na resposta por @Amber;

Presumo que queira dizer que criou um conjunto de arrays vazio, mas intificado. Por exemplo, você quer um resultado final como o abaixo de uma lista de 3 matrizes:
   $final_array = array(array(), array(), array());

Isto é simples apenas para um código manual, mas para um array de tamanho arbitrário como um array de 3 arrays of 3 arrays it starts getting complex to initialize prior to use:

     $final_array = array(array(array(), array(), array()), array(array(), array(), array()), array(array(), array(), array()));

...etc...

Eu percebo a frustração. Seria bom ter uma maneira fácil de declarar um array inicializado de arrays qualquer profundidade a usar sem verificar ou lançar erros.
 2
Author: Ray, 2014-10-13 20:34:50

E para mim o argumento sobre se um array deve ser escasso ou não depende do contexto.

Por exemplo, se $a[6] [9] não é povoado é o equivalente a $a[6] [9] sendo povoado com, por exemplo, com "" ou 0.

 2
Author: user824232, 2015-07-12 07:40:32
$r = array("arr1","arr2");

Para fazer eco de um único elemento array, deve escrever:

echo $r[0];
echo $r[1];

A saída seria: arr1 arr2

 2
Author: Deshal Kh, 2017-07-12 00:47:51