Qual é a maneira mais fácil de criar um array 2d. Eu esperava ser capaz de fazer algo semelhante a isto:
declare int d[0..m, 0..n]
Você também pode criar um array associativo, ou um array do tipo "tabela hash", 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 itens a seguir são equivalentes e resultam em uma matriz bidimensional:
ou
fonte
Apenas declarar? Você não precisa. Apenas certifique-se de que a variável existe:
Os arrays são redimensionados dinamicamente e a tentativa de escrever qualquer coisa em um elemento não existente o cria (e cria o array inteiro, se necessário)
Isso é válido para qualquer número de dimensões sem declarações anteriores.
fonte
count
na dimensão certa, por exemplocount($d[1])
, a menos que eu esteja entendendo mal seu ponto?Em primeiro lugar, o PHP não tem arrays multidimensionais, ele tem arrays de arrays.
Em segundo lugar, você pode escrever uma função que fará isso:
fonte
Para um tipo de solução simples, "preencha conforme você vai":
$foo = array(array());
Isso lhe dará um array pseudo-bidimensional flexível que pode conter $ foo [ n ] [ n ] onde n <= ∞ (é claro que você está limitado pelas restrições usuais de tamanho de memória, mas você entendeu, espero). Isso poderia, em teoria, ser estendido para criar quantas submatrizes forem necessárias.
fonte
Ou para matrizes maiores, todas com o mesmo valor:
criará um array
$m
by$n
com tudo definido como$value
.fonte
Até onde eu sei, não existe uma função php embutida para fazer isso, você precisa fazer isso por meio de um loop ou de um método personalizado que chama recursivamente para algo como array_fill indicado na resposta por @Amber;
Estou assumindo que você quer dizer criou uma matriz vazia, mas inicializada de matrizes. Por exemplo, você deseja resultados finais como os abaixo de uma matriz de 3 matrizes :
Isso é simples de codificar manualmente, mas para uma matriz de tamanho arbitrário como uma matriz de 3 matrizes de 3 matrizes começa a ficar complexo para inicializar antes de usar:
... etc ...
Eu entendo a frustração. Seria bom ter uma maneira fácil de declarar um array inicializado de arrays de qualquer profundidade para usar sem verificar ou lançar erros.
fonte
A resposta de Atli realmente me ajudou a entender isso. Aqui está um exemplo de como iterar em uma matriz bidimensional. Este exemplo mostra como encontrar valores para nomes conhecidos de uma matriz e também um foreach onde você simplesmente percorre todos os campos que encontra lá. Eu espero que isso ajude alguém.
Saídas:
fonte
E, para mim, o argumento sobre se um array deve ser esparso ou não depende do contexto.
Por exemplo, se $ a [6] [9] não for preenchido é o equivalente a $ a [6] [9] sendo preenchido com, por exemplo, "" ou 0.
fonte
para ecoar um único elemento da matriz, você deve escrever:
a saída seria:
arr1 arr2
fonte
E eu gosto assim:
fonte
Se você deseja criar rapidamente um array multidimensional para um valor simples usando um liner, eu recomendaria usar esta biblioteca de array para fazer assim:
que irá produzir
fonte
Você pode tentar isso, mas os valores da segunda dimensão serão iguais aos índices:
$array = array_fill_keys(range(0,5), range(0,5));
um pouco mais complicado para array vazio:
$array = array_fill_keys(range(0, 5), array_fill_keys(range(0, 5), null));
fonte
Você precisa declarar uma matriz em outra matriz.
$arr = array(array(content), array(content));
Exemplo:
$arr = array(array(1,2,3), array(4,5,6));
Para obter o primeiro item do array, você usará
$arr[0][0]
, que é como o primeiro item do primeiro array do array.$arr[1][0]
retornará o primeiro item da segunda matriz da matriz.fonte