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 array_map(). Enquanto array_map() cria um novo array com valores transformados, array_walk() modifica o array original diretamente, aplicando uma função de callback a cada elemento in-loco.
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 is now: ["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 suporta um terceiro argumento opcional que permite passar dados extras diretamente para sua função de callback. Isso é útil quando sua transformação depende de um valor definido fora do array — como um prefixo, sufixo ou qualquer outra entrada dinâmica.
Quando você passa um terceiro argumento para array_walk(), sua função de callback o recebe como um terceiro parâmetro:
<?php
function addCategory(&$value, $key, $category) {
$value = $category . ": " . $value;
}
$products = ["laptop", "mouse", "keyboard"];
$prefix = "Electronics";
array_walk($products, "addCategory", $prefix);
// $products agora é: ["Electronics: laptop", "Electronics: mouse", "Electronics: keyboard"]
?>Aqui, $prefix é passado como o terceiro argumento para array_walk(), e o callback o recebe como $category. Dessa forma, você pode reutilizar a mesma função de callback com diferentes prefixos sem codificar rigidamente nenhum valor dentro dela.
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
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
// Cria uma função de callback que modifica cada nome de produto adicionando o prefixo da categoria
// Usa 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