Menu
Coddy logo textTech

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.

challenge icon

Desafio

Fácil

Você 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";
}
?>
quiz iconTeste seus conhecimentos

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