A programação é sintaxe e semântica.O primeiro é determinado pelas regras da linguagem, o segundo - pela experiência do desenvolvedor. Com relação aos arrays, o desenvolvedor pode sujeitar a sintaxe à semântica. Ainda não é um objeto, mas não é mais um array no sentido tradicional. O PHP torna possível criar arrays de variáveis de vários tipos, incluindo eles próprios. Um elemento de uma matriz pode ser uma função, ou seja, a capacidade de carregar uma matriz com um algoritmo real, significado real.
A sintaxe é estável, mas muda de versão paraversões e nem sempre podem ser compatíveis com A portabilidade do programa é uma conquista bem esquecida do século passado. A semântica se desenvolve e sempre pode ser aplicada não apenas em qualquer versão de qualquer linguagem; tornou-se tradição usar construções sintáticas para expressar o que nem mesmo era previsto pelas regras da linguagem. Usando arrays como exemplo, isso pode ser entendido de forma mais simples.
Construindo matrizes
Os arrays PHP têm sintaxe e funcionalidade convenientes. Esse tipo de dados pode ser descrito com antecedência, mas geralmente é conveniente criar matrizes dinamicamente, conforme necessário.
public $ aNone = array (); // o array é descrito e não contém nada
public $ aFact = array ("abacate", "pêssego", "cereja"); // este array tem três elementos
Criação de um array no processo de verificação de alguma condição:
$ cSrcLine = "linha de dados analisados";
para ($ i = 0; $ i <13; $ i ++) {
$ cUserLine = inputUserLine (); // insira algo
if (checkFunc ($ cSrcLine, $ cUserLine) {
$ aResult [] = "Sim"; // adicionar ao array PHP
} outro {
$ aResult [] = "Não";
}
}
Como resultado da execução deste exemplo,uma matriz de 13 elementos, cujos valores serão apenas as cadeias de caracteres "Sim" ou "Não". Os elementos receberão índices de 0 a 12. O mesmo efeito pode ser obtido escrevendo-se previamente o array PHP "futuro" em uma string:
$ cFutureArray = "";
para ($ i = 0; $ i <13; $ i ++) {
$ cUserLine = inputUserLine (); // insira algo
if ($ i> 0) {$ cFutureArray. = "|"; }
if (checkFunc ($ cSrcLine, $ cUserLine) {$ cFutureArray. = "Sim";
} else {$ cFutureArray. = "Não"; }
}
$ aResult = explode ("|", $ cFutureArray);
Matrizes multidimensionais
Muitos sistemas de gerenciamento de sites (SMS)usar matrizes "em grande estilo". Por um lado, é uma boa prática, por outro, torna-se difícil de aplicar. Mesmo que o autor entenda a doutrina "PHP-array-in-array", ela não deve ser abusada: não apenas o desenvolvedor terá que se acostumar com a notação complexa. Muitas vezes, depois de um tempo, o próprio criador se lembrará por muito tempo do que escreveu no início:
array return (
"view_manager" => array (41, "template_path_stack" => array (__DIR__. "/../view",),
"router" => array ("routes" => array ("sayhello" => array (
"type" => "ZendMvcRouterHttpLiteral",
"options" => array ("route" => "/ sayhello", "defaults" => array (
"controlador" => "HelloworldControllerIndex", "ação" => "índice",))))),
"controladores" => array ("invokables" => array (
"HelloworldControllerIndex" => "HelloworldControllerIndexController"))
);
Este é o PHP Array em Array Sample Practice da ZF2. Não é muito inspirador no início, mas funciona e provavelmente torna este framework um sucesso (exemplo do módulo ZendSkeletonApplication / module / Helloworld / config / module.config.php).
Array é uma construção de dados importante durantedesign e desenvolvimento. Sua versão multidimensional já foi popular, mas com o tempo, continua sendo necessária uma matriz de no máximo duas ou três dimensões. Isso é mais simples e mais compreensível, mas do ponto de vista do profissionalismo, quando algo começa a se multiplicar, significa que algo está errado na declaração do problema ou no código.
Simples, acessível e compreensível
Ao criar em php um array em um array é melhorser limitado a dois ou três níveis. Apesar da estabilidade e confiabilidade, o PHP comete erros ao processar a sintaxe. Você pode tolerar isso, tendo um bom editor de código, acostumado a contar com precisão colchetes e vírgulas. No entanto, o PHP não controla os tipos de dados (este é o carma da programação moderna) e permite que o desenvolvedor pratique erros semânticos.
Uma regra para controlar os tipos de variáveis, ouAs próprias ideias de transformar a semântica em sintaxe são frequentemente um luxo inaceitável. Isso é uma perda de velocidade do script, legibilidade do código, ... portanto, a facilidade de codificação é sempre essencial.
PHP tem uma desvantagem significativa:quando há incerteza, o script simplesmente trava. Nem todos os depuradores lidam com contingências e muito depende da experiência e intuição do desenvolvedor. Quanto mais simples o algoritmo, mais acessível a informação estruturada, maiores são as chances de encontrar um erro ou de não admiti-lo.
É característico que, quando as primeiras matrizes apareceram,foram propostas variantes de dados na forma de estruturas - uma tentativa desajeitada de criar algo a partir de diferentes tipos de dados. O primeiro sobreviveu e adquiriu uma nova sintaxe efetiva, enquanto o último entrou para a história.
Matrizes simples e associativas
Escrever uma matriz bidimensional é outro parcolchetes "[" e "]", por exemplo: $ aSrcData [1] [2] significa se referindo ao elemento [2] do array [1] incluído no array $ aSrcData. Não há requisitos no PHP para declarar dados antecipadamente. Qualquer informação declarada sempre pode ser verificada quanto à existência.
É muito eficaz criar algo apenas sequando for necessário, na forma em que foi requerido, e para destruir quando a necessidade tiver desaparecido. Usando nomes sensíveis como chaves (índices), você pode obter construções legíveis que são significativas no contexto do local atual no algoritmo:
$ aAnketa ["nome"] = "Ivanov";
$ aAnketa ["idade"] = 42;
$ aAnketa ["work"] = "Diretor";
$ aAnketa ["ativo"] = verdadeiro;
$ aTable [] = $ aAnketa;
$ aAnketa ["nome"] = "Petrov";
$ aAnketa ["idade"] = 34;
$ aAnketa ["work"] = "Gerente";
$ aAnketa ["ativo"] = verdadeiro;
$ aTable [] = $ aAnketa;
$ aAnketa ["name"] = "Afanasiev";
$ aAnketa ["idade"] = 28;
$ aAnketa ["work"] = "Trabalhador";
$ aAnketa ["ativo"] = falso;
$ aTable [] = $ aAnketa;
$ sOne. = implode (";", $ aTable [1]). "<br/>"; // segundo array PHP para string
$ sOne. = $ aTabela [1] ["trabalho"]; // acesso a um elemento da segunda matriz
O resultado deste exemplo (o primeiro array é normal, as chaves nele começam em 0, o segundo array é associativo, ele tem quatro chaves: "nome", "idade", "trabalho", "ativo"):
$ sOne = "Petrov; 34; Gerente; 1 <br/> Gerente";
Neste exemplo simples, você pode ver comoo perfil criado pode ser aplicado a todos os funcionários. Você pode criar uma matriz de funcionários com índices por número pessoal e, se precisar de um funcionário específico, selecioná-lo por número pessoal.
Se a organização possui departamentos, ou existemtrabalhadores sazonais ou precisam separar aposentados trabalhando ... o array PHP na construção de array é muito útil, mas você nunca deve se deixar levar pela dimensionalidade. Duas ou três dimensões são o limite para uma solução eficaz.
Chaves para trabalhar com matrizes
Se antes importava como tudo funcionava, entãoNos últimos anos, as tradições da era binária, quando um programador queria saber exatamente como os elementos de um array eram armazenados e queria ter acesso direto a eles, foram completamente esquecidas. Existem muitas codificações de caracteres que ocupam mais de um byte na memória. A palavra "bit" agora pode ser encontrada apenas em operações de pesquisa de bits, mas pesquisar em um array PHP é um tópico separado. O acesso ao elemento pode ser simples e associativo. No primeiro caso, os elementos do array (tendo qualquer um dos tipos disponíveis no PHP) são numerados 0, 1, 2, ... No segundo caso, o programador especifica seu próprio índice, mais frequentemente chamado de "chave" para acessar o valor desejado.
$ aLine ["fruta"] = "laranja"; // aqui PHP array key = "fruta"
ou (para que tudo esteja correto, observando a página e a codificação do código):
$ aLine [iconv ("utf-8", "CP1251", "fruta")] = iconv ("utf-8", "CP1251", "laranja");
Ao adicionar um novo valor ao array $ aLine:
$ aLine [] = iconv ("utf-8", "CP1251", "pêssego");
$ aLine [iconv ("utf-8", "CP1251", "vegetal")] = iconv ("utf-8", "CP1251", "pepino");
$ aLine [] = iconv ("utf-8", "CP1251", "berinjela");
como resultado da execução do loop:
foreach ($ aLine as $ ck => $ cv) {
$ cOne. = $ ck. "=". $ cv. "<br/>";
}
receberá:
fruta = laranja
0 = pêssego
vegetal = pepino
1 = berinjela
Ao adicionar os elementos "pêssego" e "berinjela", a chave PHP do array é formada sequencialmente a partir de 0, e ao especificar seu valor, ela será igual a este valor.
Removendo elementos de uma matriz
A maneira mais fácil é remover um elemento de um array PHP duranteprocessá-lo. Nesse caso, por exemplo, como resultado da execução do loop, o array original é varrido e um novo é formado, no qual elementos desnecessários simplesmente não são gravados.
Você pode fazer isso mais fácil. Se nos aplicarmos ao último exemplo:
não definido ($ aLine [0]); // remove o elemento do array PHP
então o resultado será:
fruta = laranja
vegetal = pepino
1 = berinjela
Opções para manipular elementos da matrizmuitos podem ser construídos. Por exemplo, usando as funções: implode () e explode (), você pode escrever um array PHP em uma string com um separador e analisá-lo de volta em outro array usando um separador diferente.
Para simplesmente deletar um array inteiro em PHP, basta escrever: unset ($ aLine);
É o suficiente.
Pesquisa em uma matriz
PHP contém funções de pesquisa especiaisarray_keys (), array_values (), array_key_exists () e in_array (), entretanto, antes de decidir usá-los, você deve considerar fazer uma pesquisa de array PHP você mesmo.
Qualquer projeto tem uma área temática específica,arrays construídos, especialmente quando parte da semântica foi transferida para a sintaxe e representada por um conjunto de chaves significativas muito específicas. Isso permite que você execute suas próprias funções de pesquisa, que também podem ser rotuladas de forma significativa.
No PHP, você pode chamar funções cujos nomes são determinados durante a execução do programa. Um exemplo muito prático da biblioteca PHPWord que permite ler e criar documentos MS Word:
$ elements = array ("Text", "Inline", "TextRun", "Link", "PreserveText", "TextBreak",
"ListItem", "ListItemRun", "Table", "Image", "Object", "Footnote",
"Endnote", "CheckBox", "TextBox", "Field", "Line");
$ funções = array ();
para ($ i = 0; $ i <count ($ elements); $ i ++) {
$ functions [$ i] = "adicionar". $ elementos [$ i];
}
Como resultado, o array $ functions receberá os valores do array $ elements, ou seja, os nomes das funções reais que realizam trabalho com elementos reais do documento.
Ao chamar $ functions [4] em $ elements [4], você pode obter uma pesquisa perfeita e resultados rápidos.
Classificando itens
A tarefa de classificar os dados é essencial, eO PHP oferece várias funções para isso: sort (), rsort (), asort (), ksort (), ... Elementos ascendentes e descendentes, as duas segundas funções preservam a relação entre chaves e valores. Às vezes, faz sentido embaralhar os valores do array aleatoriamente - shuffle ().
Ao usar funções PHP para classificar, nãoesqueça que os elementos podem ter não apenas tipos diferentes, mas também conteúdo não inteiramente natural. Em primeiro lugar, você precisa ter muito cuidado ao classificar strings contendo letras russas, classificar datas, bem como números que são escritos em formatos diferentes.
A melhor maneira de escrever a solução perfeita sozinho, pelo menos durante a fase de teste do script, é classificando manualmente. Ela ajudará a antecipar situações imprevistas.
Matrizes embutidas
Graças às funções implode () e explode (), o arraypode ser facilmente transformado em um barbante e recebido de volta. Isso permite armazenar dados em um formato compacto e expandi-los para um estado conveniente, conforme necessário.
Um array transformado em string abre novas possibilidades. Por exemplo, a tarefa de localizar palavras-chave no texto requer que o encontrado não seja adicionado novamente.
$ cSrcLine = "Texto Texto ListItemRun TextBox ListItem TextBox Check Box CheckBox TextBox Rodapé";
$ aSrc = explode ("", $ cSrcLine);
$ cDstLine = "";
para ($ i = 0; $ i <count ($ aSrc); $ i ++) {
$ cFind = "[". $ aSrc [$ i]. "]";
if (! is_integer (strpos ($ cDstLine, $ cFind))) {
$ cDstLine. = $ cFind;
}
}
$ aDst = explode ("] [", $ cDstLine);
$ cOne = implode (";", $ aDst);
Como resultado, a variável $ cOne receberá apenas os valores da string original que ocorrerem uma vez: "Text; ListItemRun; TextBox; ListItem; Check; Box; CheckBox; Nota de rodapé".
Língua russa em chaves e valores
Não é recomendado usar nada relacionadocom codificações nacionais, em construções sintáticas. O idioma russo, como todos os outros idiomas cujos caracteres vão além de a-z, não criará problemas por estar na área de dados, mas não na sintaxe do código. Às vezes, até mesmo uma simples tarefa de PHP "para imprimir um array em uma impressora ou em uma tela" levará a "krakozyabram" e, mais frequentemente, apenas interromperá o script.
PHP é uma linguagem leal e tolerante comcódigos nacionais, mas há muitas situações em que a quantidade de trabalho concluída tem que ser feita novamente apenas porque no lugar certo e na hora certa um valor chave aparece, que não será possível reconhecer.
Sintaxe PHP e ambiente de linguagem
Deve-se lembrar que a sintaxe do PHP é uma coisa, masas construções desta sintaxe "lidam" com outras aplicações, com o sistema operacional, com opções de hardware. As opções são muitas, nunca é possível prever tudo.
A regra é “no código existe apenas o código, mas na entrada,dentro, e na saída estão todas as informações ”ajudará a evitar surpresas inesperadas. O valor PHP no array pode ser "russo", mas a chave para ele deve ser sintaticamente correta não apenas do ponto de vista da linguagem fornecida, mas também do ponto de vista de seu ambiente.