Matrizes — Noções básicas
Um array em PHP não é um array comum — é uma superestrutura de dados que funciona como uma lista, um dicionário e um conjunto, tudo em um. Em PHP, os arrays são, sem dúvida, o tipo de dados que você mais usará.
1. O que é, na verdade, um array em PHP
Um array em PHP é, essencialmente, um mapa ordenado. Em linguagem simples: ele mapeia chaves para valores e lembra a ordem de inserção.
<?php
// Indexed array: keys are automatically assigned numbers (0, 1, 2, ...)
$fruits = ["apple", "banana", "orange"];
// Associative array: keys are strings you specify
$user = [
"name" => "John",
"age" => 25,
"city" => "New York"
];
?>
| Idioma | Lista | Dicionário | Matriz PHP |
|---|---|---|---|
| Python | list |
dict |
array faz as duas coisas |
| JavaScript | Array |
Object / Map |
array faz as duas coisas |
| PHP | array |
array |
Uma única estrutura cuida de tudo |
2. Criação de matrizes
O PHP oferece duas sintaxes para criar matrizes. [] é a sintaxe moderna (PHP 5.4+) — use esta:
<?php
// Recommended syntax (PHP 5.4+)
$arr1 = []; // Empty array
$arr2 = [1, 2, 3]; // Indexed array
$arr3 = ["a" => 1, "b" => 2]; // Associative array
// Legacy syntax (for compatibility with older code)
$arr4 = array();
$arr5 = array(1, 2, 3);
$arr6 = array("a" => 1, "b" => 2);
?>
[] tem 5 caracteres a menos que array(). Não há motivo para não usá-lo.
3. Acesso aos elementos de uma matriz
Use colchetes [] com uma tecla para ler ou modificar elementos:
<?php
$fruits = ["apple", "banana", "orange"];
echo $fruits[0]; // apple (index starts at 0)
echo $fruits[1]; // banana
echo $fruits[2]; // orange
$fruits[1] = "strawberry"; // Modify the second element
echo $fruits[1]; // strawberry
// Access associative arrays by key name
$user = ["name" => "John", "age" => 25];
echo $user["name"]; // John
$user["age"] = 26; // Update the age
?>
Warning: Undefined array key. Adquira o hábito de verificar primeiro com isset() ou array_key_exists().
4. Adicionar e remover elementos
<?php
// === Adding Elements ===
$arr = [1, 2];
$arr[] = 3; // Append to the end (the simplest syntax)
// $arr is now [1, 2, 3]
// Or use array_push (convenient when adding multiple)
array_push($arr, 4, 5);
// $arr is now [1, 2, 3, 4, 5]
// Add with a specific key
$arr["key"] = "value";
// === Removing Elements ===
unset($arr[2]); // Remove the element with index 2
// $arr is now [1, 2, 4, 5, "key"=>"value"]
// array_pop: remove and return the last element
$last = array_pop($arr);
// array_shift: remove and return the first element
$first = array_shift($arr);
?>
$arr[] = $val é a sintaxe de acréscimo mais comum no PHP — é mais concisa do que array_push() e um pouco mais rápida (sem a sobrecarga da chamada de função).
5. Percorrendo matrizes
<?php
$fruits = ["apple", "banana", "orange"];
// foreach for indexed arrays (value only)
foreach ($fruits as $fruit) {
echo $fruit . "<br>";
}
// foreach for associative arrays (key and value)
$user = ["name" => "John", "age" => 25, "city" => "New York"];
foreach ($user as $key => $value) {
echo "{$key}: {$value}<br>";
}
// name: John
// age: 25
// city: New York
?>
O foreach não se importa se o array é indexado ou associativo — ele percorre tudo com facilidade. Essa é a beleza do tipo de array unificado do PHP.
▶ Exemplo: Percorrendo matrizes aninhadas
<?php
// Real-world: iterating through a student grade sheet
// (mixing associative and indexed arrays)
$classroom = [
["name" => "Alice", "scores" => ["Math" => 85, "English" => 92]],
["name" => "Bob", "scores" => ["Math" => 78, "English" => 88]],
];
foreach ($classroom as $student) {
$total = array_sum($student["scores"]);
echo "{$student['name']} — Total: {$total}<br>";
}
?>
6. Depuração de matrizes
<?php
$user = [
"name" => "John",
"age" => 25,
"skills" => ["PHP", "MySQL", "JavaScript"]
];
// var_dump: the most detailed debug output (includes type and length)
var_dump($user);
/*
array(3) {
["name"]=> string(4) "John"
["age"]=> int(25)
["skills"]=> array(3) { [0]=> ... }
}
*/
// print_r: a concise version (shows structure only, no types)
print_r($user);
/*
Array ( [name] => John [age] => 25 [skills] => Array (...) )
*/
// In HTML, use <pre> tags for cleaner output
echo "<pre>";
print_r($user);
echo "</pre>";
?>
var_dump(). Só quer dar uma olhada rápida no conteúdo? → echo "<pre>" + print_r(). Em produção? → Nunca exiba arrays diretamente; use o registro em log.
7. count() — Contagem de elementos
<?php
$fruits = ["apple", "banana", "orange"];
echo count($fruits); // 3
$empty = [];
echo count($empty); // 0
// sizeof is an alias for count — they're identical
echo sizeof($fruits); // 3
?>
8. Verificando se uma chave ou um valor existe
<?php
$user = ["name" => "John", "age" => 25];
// Check if a key exists
var_dump(array_key_exists("name", $user)); // bool(true)
var_dump(array_key_exists("email", $user)); // bool(false)
// Check if a value exists
var_dump(in_array("John", $user)); // bool(true)
var_dump(in_array("Jane", $user)); // bool(false)
?>
▶ Exemplo: Padrões seguros de acesso a matrizes
<?php
// When you're not sure a key exists, check first
$user = ["name" => "John"];
// Safe pattern
if (isset($user["age"])) {
echo $user["age"];
} else {
echo "Age not set";
}
// Concise pattern: use ?? to provide a default
$age = $user["age"] ?? "Unknown";
echo $age; // Unknown (because the "age" key doesn't exist)
?>
isset() vs. ??: isset($arr['key']) verifica se a chave existe e se o valor não é nulo. array_key_exists('key', $arr) verifica apenas se a chave existe (retorna true mesmo que o valor seja nulo).
❓ Perguntas Frequentes
P: Qual é a diferença entre um array do PHP e um array do JavaScript? R: Um array do PHP é uma estrutura multifuncional (lista + dicionário combinados em um só). O Array do JavaScript é apenas uma lista; o Object/Map desempenha a função de dicionário. No PHP,
[0=>"a", 1=>"b"]e["x"=>1, "y"=>2]são exatamente do mesmo tipo.
P: Qual é a diferença entre matrizes indexadas e associativas? R: Para o PHP, não há essencialmente nenhuma diferença — ambas são mapas ordenados. As matrizes indexadas têm chaves inteiras atribuídas automaticamente, começando em 0. As matrizes associativas têm chaves de string personalizadas. É possível até mesmo misturá-las:
["a"=>1, 2=>3, 4=>5]é perfeitamente válido.
P: Por que meu
foreachnão modifica o array original? R: A menos que você use&$valpara percorrer por referência,foreach ($arr as $val)fornece a$valuma cópia de cada elemento do array. Modificar$valnão afeta o array original.
📖 Resumo
- Os arrays do PHP são mapas ordenados — os arrays indexados e os associativos são, na essência, do mesmo tipo
- Use
[]para criar matrizes;$arr[key]para acessar/modificar elementos $arr[] = $valacrescenta um elemento;unset($arr[key])remove umforeach ($arr as $key => $val)percorre matrizesvar_dump()/print_r()depuração de estruturas de matrizisset()/??/array_key_exists()permitem acesso segurocount()conta elementos;in_array()verifica valores;array_key_exists()verifica chaves
📝 Exercícios
- Crie um array indexado com 5 nomes de cidades, exiba uma lista numerada usando o
foreache, em seguida, use$arr[]para acrescentar mais uma cidade e exiba a lista novamente. - Crie um array associativo de usuário com pelo menos 3 propriedades (nome, idade, e-mail, lista de habilidades) e, em seguida, use o foreach para exibi-lo como uma tabela HTML. Trate a lista de habilidades (que, por sua vez, é um array) de maneira especial — exiba-a como uma string separada por vírgulas.
- Escreva uma função
safeGet($arr, $key, $default)que recupere com segurança um valor de uma matriz por meio de uma chave, retornando o valor padrão caso a chave não exista.



