Percorrendo com 'array_walk'
Parte da seção Lógica & Fluxo do Journey de PHP da Coddy — lição 44 de 68.
A função array_walk() oferece uma abordagem diferente para processar arrays em comparação com a array_map(). Enquanto a array_map() cria um novo array com valores transformados, a array_walk() modifica o array original diretamente, aplicando uma função de callback a cada elemento in-place.
Esta função é particularmente útil quando você deseja alterar o array existente sem criar uma cópia. A função de callback que você fornece recebe cada elemento do array por referência, permitindo que você modifique os valores originais diretamente.
<?php
function addPrefix(&$value, $key) {
$value = "Item: " . $value;
}
$items = ["apple", "banana", "orange"];
array_walk($items, "addPrefix");
// $items agora é: ["Item: apple", "Item: banana", "Item: orange"]
?>Observe como a função de callback utiliza &$value para receber o elemento do array por referência. Isso permite que a função modifique o elemento original do array diretamente. O segundo parâmetro $key fornece acesso à chave do elemento atual, embora nem sempre seja necessário para transformações simples.
array_walk() também aceita um terceiro argumento opcional — dados extras que são passados diretamente para o seu callback como um terceiro parâmetro. Isso é útil quando sua transformação depende de um valor definido fora do array.
<?php
function addPrefix(&$value, $key, $prefix) {
$value = $prefix . $value;
}
$items = ["apple", "banana", "orange"];
array_walk($items, "addPrefix", "Item: ");
// $items is now: ["Item: apple", "Item: banana", "Item: orange"]
?>Aqui, a string
"Item: " é passada como o terceiro argumento para array_walk() e recebida como $prefix dentro do callback. Isso permite que você reutilize o mesmo callback com diferentes valores extras.Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Desafio
FácilVocê receberá duas entradas: uma lista de nomes de produtos separados por vírgula e um prefixo de categoria. A primeira entrada contém nomes de produtos como uma string no formato laptop,mouse,keyboard,monitor, e a segunda entrada é um texto de prefixo de categoria (exemplo: Electronics).
Leia ambas as entradas, converta os nomes dos produtos separados por vírgula em um array, crie uma função de callback que adicione o prefixo da categoria a cada nome de produto no formato "Category: ProductName", use array_walk() com sua função de callback para modificar o array original diretamente e imprima cada nome de produto modificado em uma linha separada.
Sua função de callback deve usar o parâmetro &$value para modificar os elementos do array por referência. A função deve concatenar o prefixo da categoria com dois pontos e um espaço, seguido pelo nome do produto.
Formato de entrada:
- Primeira linha: Nomes de produtos separados por vírgula (exemplo:
laptop,mouse,keyboard,monitor) - Segunda linha: Texto do prefixo da categoria (exemplo:
Electronics)
Saída esperada: Cada nome de produto modificado impresso em uma linha separada no formato Category: ProductName
Folha de consulta
A função array_walk() modifica o array original diretamente ao aplicar uma função de callback a cada elemento in-loco, ao contrário de array_map(), que cria um novo array.
A função de callback recebe cada elemento do array por referência usando &$value, permitindo a modificação direta dos valores originais. O segundo parâmetro $key fornece acesso à chave do elemento atual.
array_walk() também aceita um terceiro argumento opcional — dados extras que são passados para o callback como um terceiro parâmetro. Isso é útil quando seu callback precisa de informações adicionais para processar cada elemento.
<?php
function addPrefix(&$value, $key) {
$value = "Item: " . $value;
}
$items = ["apple", "banana", "orange"];
array_walk($items, "addPrefix");
// $items is now: ["Item: apple", "Item: banana", "Item: orange"]
// Using the optional third argument (extra data):
function applyPrefix(&$value, $key, $prefix) {
$value = $prefix . $value;
}
$fruits = ["apple", "banana", "orange"];
array_walk($fruits, "applyPrefix", "Fresh: ");
// $fruits is now: ["Fresh: apple", "Fresh: banana", "Fresh: orange"]
?>Experimente você mesmo
<?php
// Lê os nomes dos produtos separados por vírgula
$products_input = trim(fgets(STDIN));
// Lê o prefixo da categoria
$category = trim(fgets(STDIN));
// Converte a string separada por vírgulas em um array
$products = explode(',', $products_input);
// TODO: Escreva seu código abaixo
// Crie uma função de callback que modifica cada nome de produto adicionando o prefixo da categoria
// Use array_walk() com sua função de callback para modificar o array
// Exibe cada nome de produto modificado em uma linha separada
foreach ($products as $product) {
echo $product . "\n";
}
?>Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica & Fluxo
1Funções Avançadas
Funções AnônimasClosures e 'use'Arrow FunctionsFunções de CallbackUsando 'call_user_func'Funções VariáveisPassagem por ReferênciaFunções RecursivasRecapitulação: Mix de Funções4Arrays Multidimensionais
Criando um Array 2DAcessando Elementos de um Array 2DModificando Elementos de um Array 2DIterando com Loops AninhadosArrays Associativos 2DRecapitulação: Exercício de Grade Simples2Manipulações Avançadas de Arrays
Adicionando com 'array_push'Removendo com 'array_pop'Adicionando com 'array_unshift'Removendo com 'array_shift'Mesclando Arrays IndexadosMesclando Arrays AssociativosExtraindo com 'array_slice'Valores com 'in_array'Chaves com 'array_search'Recapitulação: Exercício de Playlist3Ordenação de Arrays
Ordenar Arrays Indexados (Crescente)Ordenar Arrays Indexados (Decrescente)Ordenar Arrays Associativos por ValorOrdenar Arrays Associativos por ChaveOrdenação por Ordem NaturalOrdenação Personalizada com 'usort'Recapitulação: Ordenação de Leaderboard6Funções de Ordem Superior para Arrays
Transformando com 'array_map''array_map' com Funções PersonalizadasFiltrando com 'array_filter''array_filter' com Funções PersonalizadasReduzindo com 'array_reduce'Percorrendo com 'array_walk'Recapitulação: Processamento de Dados