Functional Helpers
Sort Callback
usort uses a comparison callback to order complex values.
compare two rows
The callback returns how two values should be ordered.
Sort Callback
sort_callback.php
Replay: real traced execution (multi-file project)
<?php
function by_score($left, $right) {
return $left["score"] <=> $right["score"];
}
$firstScore = 5;
$rows = [
["name" => "Ada", "score" => $firstScore],
["name" => "Linus", "score" => 3]
];
usort($rows, "by_score");
$firstName = $rows[0]["name"];
$firstValue = $rows[0]["score"];
echo "firstScore=" . $firstScore . "\n";
echo "firstName=" . $firstName . "\n";
echo "firstValue=" . $firstValue . "\n";
<?php
function by_score($left, $right) {
return $left["score"] <=> $right["score"];
}
$firstScore = 2;
$rows = [
["name" => "Ada", "score" => $firstScore],
["name" => "Linus", "score" => 3]
];
usort($rows, "by_score");
$firstName = $rows[0]["name"];
$firstValue = $rows[0]["score"];
echo "firstScore=" . $firstScore . "\n";
echo "firstName=" . $firstName . "\n";
echo "firstValue=" . $firstValue . "\n";
<?php
function by_score($left, $right) {
return $left["score"] <=> $right["score"];
}
$firstScore = 9;
$rows = [
["name" => "Ada", "score" => $firstScore],
["name" => "Linus", "score" => 3]
];
usort($rows, "by_score");
$firstName = $rows[0]["name"];
$firstValue = $rows[0]["score"];
echo "firstScore=" . $firstScore . "\n";
echo "firstName=" . $firstName . "\n";
echo "firstValue=" . $firstValue . "\n";
$firstScore ← 5, $rows ← Array
6$firstScore→ 5 = 5; //@firstScore=2, 97$rows→ Array = [8 ["name" => "Ada", "score" => $firstScore5],9 ["name" => "Linus", "score" => 3]10];11usort($rowsArray, "by_score");12$firstName = $rows[0]["name"];function by_score($left, $right)
1<?php2function by_score($leftArray, $rightArray) {3 return $left["score"]5 <=> $right["score"]3;4}$firstName ← Linus, $firstValue ← 3
10];11usort($rowsArray, "by_score");12$firstName→ Linus = $rows[0]["name"]Linus;13$firstValue→ 3 = $rows[0]["score"]3;1415echo "firstScore=" . $firstScore5 . "\n";16echo "firstName=" . $firstNameLinus . "\n";17echo "firstValue=" . $firstValue3 . "\n";outputfirstScore=5 firstName=Linus firstValue=3
$firstScore ← 2, $rows ← Array
6$firstScore→ 2 = 2;7$rows→ Array = [8 ["name" => "Ada", "score" => $firstScore2],9 ["name" => "Linus", "score" => 3]10];11usort($rowsArray, "by_score");12$firstName = $rows[0]["name"];function by_score($left, $right)
1<?php2function by_score($leftArray, $rightArray) {3 return $left["score"]2 <=> $right["score"]3;4}$firstName ← Ada, $firstValue ← 2
10];11usort($rowsArray, "by_score");12$firstName→ Ada = $rows[0]["name"]Ada;13$firstValue→ 2 = $rows[0]["score"]2;1415echo "firstScore=" . $firstScore2 . "\n";16echo "firstName=" . $firstNameAda . "\n";17echo "firstValue=" . $firstValue2 . "\n";outputfirstScore=2 firstName=Ada firstValue=2
$firstScore ← 9, $rows ← Array
6$firstScore→ 9 = 9;7$rows→ Array = [8 ["name" => "Ada", "score" => $firstScore9],9 ["name" => "Linus", "score" => 3]10];11usort($rowsArray, "by_score");12$firstName = $rows[0]["name"];function by_score($left, $right)
1<?php2function by_score($leftArray, $rightArray) {3 return $left["score"]9 <=> $right["score"]3;4}$firstName ← Linus, $firstValue ← 3
10];11usort($rowsArray, "by_score");12$firstName→ Linus = $rows[0]["name"]Linus;13$firstValue→ 3 = $rows[0]["score"]3;1415echo "firstScore=" . $firstScore9 . "\n";16echo "firstName=" . $firstNameLinus . "\n";17echo "firstValue=" . $firstValue3 . "\n";outputfirstScore=9 firstName=Linus firstValue=3