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 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.
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

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

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";
}
?>
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