Como declarar uma matriz bidimensional mais facilmente em PHP?
Tipo:
declare int d[0..m, 0..n]
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]';
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);
$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.
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));
}
Para uma solução simples:
$foo = array(array());
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
.
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.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.
$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