array_walk visits each value and can update values by reference.

visit and update Use `array_walk` when the callback should touch each existing value.

Walk Update

prefix
walk_update.php
Replay: real traced execution (multi-file project)
<?php
function prefix_value(&$value, $key, $prefix) {
    $value = $prefix . $value;
}

$prefix = "dev-";
$names = ["Ada", "Linus"];
array_walk($names, "prefix_value", $prefix);
$summary = implode(",", $names);

echo "prefix=" . $prefix . "\n";
echo "names=" . $summary . "\n";
<?php
function prefix_value(&$value, $key, $prefix) {
    $value = $prefix . $value;
}

$prefix = "qa-";
$names = ["Ada", "Linus"];
array_walk($names, "prefix_value", $prefix);
$summary = implode(",", $names);

echo "prefix=" . $prefix . "\n";
echo "names=" . $summary . "\n";
<?php
function prefix_value(&$value, $key, $prefix) {
    $value = $prefix . $value;
}

$prefix = "ops-";
$names = ["Ada", "Linus"];
array_walk($names, "prefix_value", $prefix);
$summary = implode(",", $names);

echo "prefix=" . $prefix . "\n";
echo "names=" . $summary . "\n";
  1. $prefix ← dev-, $names ← Array

    6$prefix→ dev- = "dev-"; //@prefix="qa-", "ops-"7$names→ Array = ["Ada", "Linus"];8array_walk($namesArray, "prefix_value", $prefixdev-);9$summary = implode(",", $names);
  2. $value ← dev-Ada

    pass 1 of 2
    1<?php2function prefix_value(&$valueAda, $key0, $prefixdev-) {3    $value→ dev-Ada = $prefixdev- . $value;4}
  3. $value ← dev-Linus

    pass 2 of 2
    1<?php2function prefix_value(&$valueLinus, $key1, $prefixdev-) {3    $value→ dev-Linus = $prefixdev- . $value;4}
  4. $summary ← dev-Ada,dev-Linus

    7$names = ["Ada", "Linus"];8array_walk($namesArray, "prefix_value", $prefixdev-);9$summary→ dev-Ada,dev-Linus = implode(",", $namesArray);1011echo "prefix=" . $prefixdev- . "\n";12echo "names=" . $summarydev-Ada,dev-Linus . "\n";
    outputprefix=dev-
    names=dev-Ada,dev-Linus
  1. $prefix ← qa-, $names ← Array

    6$prefix→ qa- = "qa-";7$names→ Array = ["Ada", "Linus"];8array_walk($namesArray, "prefix_value", $prefixqa-);9$summary = implode(",", $names);
  2. $value ← qa-Ada

    pass 1 of 2
    1<?php2function prefix_value(&$valueAda, $key0, $prefixqa-) {3    $value→ qa-Ada = $prefixqa- . $value;4}
  3. $value ← qa-Linus

    pass 2 of 2
    1<?php2function prefix_value(&$valueLinus, $key1, $prefixqa-) {3    $value→ qa-Linus = $prefixqa- . $value;4}
  4. $summary ← qa-Ada,qa-Linus

    7$names = ["Ada", "Linus"];8array_walk($namesArray, "prefix_value", $prefixqa-);9$summary→ qa-Ada,qa-Linus = implode(",", $namesArray);1011echo "prefix=" . $prefixqa- . "\n";12echo "names=" . $summaryqa-Ada,qa-Linus . "\n";
    outputprefix=qa-
    names=qa-Ada,qa-Linus
  1. $prefix ← ops-, $names ← Array

    6$prefix→ ops- = "ops-";7$names→ Array = ["Ada", "Linus"];8array_walk($namesArray, "prefix_value", $prefixops-);9$summary = implode(",", $names);
  2. $value ← ops-Ada

    pass 1 of 2
    1<?php2function prefix_value(&$valueAda, $key0, $prefixops-) {3    $value→ ops-Ada = $prefixops- . $value;4}
  3. $value ← ops-Linus

    pass 2 of 2
    1<?php2function prefix_value(&$valueLinus, $key1, $prefixops-) {3    $value→ ops-Linus = $prefixops- . $value;4}
  4. $summary ← ops-Ada,ops-Linus

    7$names = ["Ada", "Linus"];8array_walk($namesArray, "prefix_value", $prefixops-);9$summary→ ops-Ada,ops-Linus = implode(",", $namesArray);1011echo "prefix=" . $prefixops- . "\n";12echo "names=" . $summaryops-Ada,ops-Linus . "\n";
    outputprefix=ops-
    names=ops-Ada,ops-Linus