Arrays and Iteration
Array Filtering
Filtering keeps only the values that pass a condition.
filter condition
A filter condition decides whether each candidate value should be kept.
Array Filtering
array_filtering.php
Replay: real traced execution (multi-file project)
<?php
$minimum = 5;
$kept = 0;
$sum = 0;
foreach ([2, 5, 7, 9] as $value) {
if ($value >= $minimum) {
$kept = $kept + 1;
$sum = $sum + $value;
}
}
echo "minimum=" . $minimum . "\n";
echo "kept=" . $kept . "\n";
echo "sum=" . $sum . "\n";
<?php
$minimum = 3;
$kept = 0;
$sum = 0;
foreach ([2, 5, 7, 9] as $value) {
if ($value >= $minimum) {
$kept = $kept + 1;
$sum = $sum + $value;
}
}
echo "minimum=" . $minimum . "\n";
echo "kept=" . $kept . "\n";
echo "sum=" . $sum . "\n";
<?php
$minimum = 7;
$kept = 0;
$sum = 0;
foreach ([2, 5, 7, 9] as $value) {
if ($value >= $minimum) {
$kept = $kept + 1;
$sum = $sum + $value;
}
}
echo "minimum=" . $minimum . "\n";
echo "kept=" . $kept . "\n";
echo "sum=" . $sum . "\n";
$minimum ← 5, $kept ← 0, $sum ← 0
1<?php2$minimum→ 5 = 5; //@minimum=3, 73$kept→ 0 = 0;4$sum→ 0 = 0;foreach ([2, 5, 7, 9] as $value)
pass 1 of 46foreach ([2, 5, 7, 9] as $value2) {7 if ($value >= $minimum) {8 $kept = $kept + 1;All 4 passes — pass 1 is the card above pass $value1 2 2 5 3 7 4 9 $kept ← 1, $sum ← 5
pass 1 of 36foreach ([2, 5, 7, 9] as $value) {7 if ($value5 >= $minimum5) {8 $kept→ 1 = $kept + 1;9 $sum→ 5 = $sum + $value5;10 }All 3 passes — pass 1 is the card above pass $value$kept$sum1 5 0 → 1 0 → 5 2 7 1 → 2 5 → 12 3 9 2 → 3 12 → 21 echo "minimum=" . $minimum . " ";
13echo "minimum=" . $minimum5 . "\n";14echo "kept=" . $kept3 . "\n";15echo "sum=" . $sum21 . "\n";outputminimum=5 kept=3 sum=21
$minimum ← 3, $kept ← 0, $sum ← 0
1<?php2$minimum→ 3 = 3;3$kept→ 0 = 0;4$sum→ 0 = 0;foreach ([2, 5, 7, 9] as $value)
pass 1 of 46foreach ([2, 5, 7, 9] as $value2) {7 if ($value >= $minimum) {8 $kept = $kept + 1;All 4 passes — pass 1 is the card above pass $value1 2 2 5 3 7 4 9 $kept ← 1, $sum ← 5
pass 1 of 36foreach ([2, 5, 7, 9] as $value) {7 if ($value5 >= $minimum3) {8 $kept→ 1 = $kept + 1;9 $sum→ 5 = $sum + $value5;10 }All 3 passes — pass 1 is the card above pass $value$kept$sum1 5 0 → 1 0 → 5 2 7 1 → 2 5 → 12 3 9 2 → 3 12 → 21 echo "minimum=" . $minimum . " ";
13echo "minimum=" . $minimum3 . "\n";14echo "kept=" . $kept3 . "\n";15echo "sum=" . $sum21 . "\n";outputminimum=3 kept=3 sum=21
$minimum ← 7, $kept ← 0, $sum ← 0
1<?php2$minimum→ 7 = 7;3$kept→ 0 = 0;4$sum→ 0 = 0;foreach ([2, 5, 7, 9] as $value)
pass 1 of 46foreach ([2, 5, 7, 9] as $value2) {7 if ($value >= $minimum) {8 $kept = $kept + 1;All 4 passes — pass 1 is the card above pass $value$minimum$kept$sum1 2 — — — 2 5 — — — 3 7 7 0 → 1 0 → 7 4 9 7 1 → 2 7 → 16 $kept ← 1, $sum ← 7
pass 1 of 26foreach ([2, 5, 7, 9] as $value) {7 if ($value7 >= $minimum7) {8 $kept→ 1 = $kept + 1;9 $sum→ 7 = $sum + $value7;10 }$kept ← 2, $sum ← 16
pass 2 of 26foreach ([2, 5, 7, 9] as $value) {7 if ($value9 >= $minimum7) {8 $kept→ 2 = $kept + 1;9 $sum→ 16 = $sum + $value9;10 }echo "minimum=" . $minimum . " ";
13echo "minimum=" . $minimum7 . "\n";14echo "kept=" . $kept2 . "\n";15echo "sum=" . $sum16 . "\n";outputminimum=7 kept=2 sum=16
Keep or Drop
- Start with values
[2, 5, 7, 9]. - Check each value against
minimum. - Keep values that pass the check.
- Count kept values and add them into
sum. | Value |>= 5? | Action | | --- | --- | --- | |2| no | drop | |5| yes | keep | |7| yes | keep | |9| yes | keep |
Exercise: array_filtering.php
Filter values with an if check, count the kept values, and add their sum